princetonafeezx/Password-Strength
GitHub: princetonafeezx/Password-Strength
一款企业级Python CLI密码强度审计工具,通过多层策略规则、正则模式检测和熵计算对密码进行深度评分,并生成带可操作建议的结构化报告。
Stars: 1 | Forks: 0
第 3 天 —— 密码强度架构师
应用:密码策略审计器
功能:接受一个密码(或包含密码的文件),并根据可配置的规则对每个密码进行评分:长度、字符多样性、常见密码字典检查、连续字符检测、键盘模式检测(例如 “qwerty”)、熵计算。输出包含具体、可操作反馈的详细强度报告。
重要性:展示了基于规则的多层标准验证,而不仅仅是“强/弱”的二元输出。
核心技能:用于模式检测的正则表达式(RegEx)(连续字符、键盘行、重复模式)、字典查找、熵数学、带加权重标准的评分算法。
独立价值:审计任何密码并获得专业级的强度报告。
Mega-approle:dataguard/passwords.py —— 在管道内验证凭证数据。
核心用途
一个 CLI 工具,接受一个或多个密码,根据分层策略和风险规则对其进行评估,安全地清理输入,检测弱模式,对强度进行评分,解释结果,并导出结构化的审计就绪报告。
1. 输入处理与接入
应用应支持多种输入模式,以便在真实工作流程中运行,而不仅仅是演示。
功能:
通过 CLI 标志输入单个密码
交互式隐藏密码提示
批量文件输入
标准输入管道
一次运行中输入多个文件
针对大文件的可选逐行流式模式
UTF-8 和回退编码支持
空输入检测
对不可读或丢失文件的优雅处理
安全处理尾部换行符、制表符、BOM 标记和粘贴的垃圾字符
为每个密码源添加可选的元数据标记
2. 输入清理与清洗
由于它位于 DataGuard 内部,应在评分前进行清理。
功能:
移除 BOM 字符
移除零宽度和不可见的 Unicode 字符
ANSI 转义序列剔除
控制字符过滤
Unicode 空白字符标准化
可选智能引号标准化
可选外部空格修剪
检测可疑的隐藏字符
保留原始输入以供审计模式使用
清理后与原始数据的差异预览
每个密码的清理操作日志
针对格式错误或可疑输入的警告代码
3. 策略引擎
应支持严格的企业规则和灵活的用户定义规则。
功能:
最小长度要求
最大长度策略
必需小写字母
必需大写字母
必需数字
必需特殊字符
允许的特殊字符策略
禁止字符策略
可配置的最小唯一字符数
可配置的最小字符类别数
禁止前导或尾随空格
禁止超过阈值的重复符号
禁止批次内的密码重用
可选的密码短语友好模式
可配置的组织策略预设
JSON 或 YAML 配置驱动的策略加载
CLI 覆盖配置值
执行前的策略验证
4. 使用 RegEx 和规则逻辑的模式检测
这是应用展示深度验证能力的地方。
功能:
连续字符检测,如 abcd, 1234
反向序列检测,如 dcba, 4321
重复字符检测,如 aaaaaa
重复块检测,如 abcabc
键盘行模式检测,如 qwerty, asdf, 12345
常见替换检测,如 P@ssw0rd
日期模式检测
年份模式检测
月/日组合
密码内的类电子邮件模式检测
类电话号码模式检测
类用户名子串检测
来自可选用户上下文输入的类姓名标记检测
域/公司名子串检测
常见后缀和前缀模式检测
基于正则的弱标记提取
过度结构可预测性检测
用于模式比较的 Leetspeak(黑客语)标准化
在适当情况下进行不区分大小写的弱模式匹配
5. 字典与禁用密码情报
强大的审计器不应仅限于字符多样性。
功能:
常见密码黑名单检查
支持自定义禁用密码文件
特定组织的禁用词列表
字典词检测
多词短语检测
弱词加数字模式检测
带替换的弱根词检测
可选的不区分大小写字典匹配
字典比较前的标记化和标准化
检测与常见禁用密码仅有一编辑之差的密码
弱密码家族检测,如 Summer2025!, Winter2024!
6. 熵与评分引擎
评分应当是可解释且分层的,而非过于简单。
功能:
基于长度的评分贡献
字符多样性贡献
熵估计
模式惩罚系统
字典惩罚系统
重复惩罚
可预测性惩罚
对真实随机性信号的奖励
对具有不可预测性的较长密码短语的奖励
加权评分模型
可配置的评分权重
最终标准化分数,例如 0–100
评级区间,如 Very Weak, Weak, Fair, Strong, Excellent
区分合规结果与强度结果
区分结构分数和风险分数
可解释的分数细分
7. 详细反馈引擎
专业工具应准确告知用户密码失败的原因。
功能:
人类可读的摘要
可操作的改进建议
按严重程度排序的反馈
逐规则通过/失败报告
特定模式警告
特定禁用标记警告
熵解释
合规性解释
避免暴露完整密码的建议
可选的掩码反馈模式
每个警告的开发者可读机器代码
8. 安全安全的输出行为
密码工具必须谨慎处理敏感数据。
功能:
隐藏密码输入
默认输出掩码
可选的无回显模式
日志脱敏
调试跟踪脱敏
部分指纹识别而非显示完整明文
用于审计工作流的基于哈希的记录标识符
在 Python 中切实可行的可选安全内存处理实践
启用原始密码输出时的明确警告
完全禁止原始密码存储的选项
默认排除明文的安全导出模式
9. 批量审计与报告
企业 CLI 工具需要有用的批量分析。
功能:
从文件中逐行扫描密码
批量汇总统计
按强度类别的计数
按策略失败类型的计数
跨批次重复密码检测
跨批次重用根模式检测
最高频弱点报告
每条记录结果加全局摘要
部分行解析失败时的部分成功处理
文件级错误隔离
大批量性能模式
详细模式下的进度指示器
10. 导出格式
有用的输出使应用具备强大的组合能力和自动化就绪能力。
功能:
控制台报告
美化表格输出
JSON 导出
JSONL 导出
CSV 导出
审计报告导出
仅摘要模式
详细模式
仅合规模式
差异样式清理预览
映射到结果严重程度的退出码
可选的打包报告到带时间戳的输出目录
11. 错误处理与弹性
由于重点也包括错误处理,这一块应非常强大。
功能:
结构化的自定义异常
区分输入错误和配置错误
区分验证错误和内部错误
优雅的文件读取失败处理
无效配置字段检测
无效规则范围检测
不支持的编码处理
批量部分失败处理
确定性退出码
故障安全默认值
带追溯的调试模式
用于脚本的静默模式
用于故障排除的详细模式
友好的终端用户消息
带上下文的内部异常包装
可选资源缺失时的安全回退行为
12. CLI 设计与可用性
强大的企业 CLI 应易于使用。
功能:
诸如 audit, validate, score, export 之类的命令
丰富的帮助文本
帮助输出中的示例
配置文件支持
预设策略配置文件
试运行模式
严格模式和宽容模式
静默、详细和调试标志
适用于 CI/CD 的返回码
版本命令
Shell 友好的 JSON 模式
清晰的命令命名
稳定的自动化输出契约
13. 数据模型与 Schema
为了保持企业级水准,内部结构应明确。
功能:
PasswordInputRecord
SanitizationResult
PolicyCheckResult
PatternMatchResult
DictionaryMatchResult
PasswordScore
PasswordAuditResult
BatchAuditSummary
RunReport
所有主要模型的可序列化 to_dict() 输出
14. 高级企业功能
这些是让应用感觉真实的外加功能。
功能:
组织策略模板
自定义正则规则支持
自定义禁用标记支持
部门特定策略
CI 集成模式
策略失败时非零退出
弱分数阈值时非零退出
历史趋势就绪的 JSONL 输出
面向审计团队的可解释性模式
可选的密码时效元数据字段
可选的基于账户角色的评分上下文
可选的环境标记,如 prod, dev, admin
策略即代码结构
插件就绪的规则架构
15. 突显组合价值的扩展功能
如果你希望项目看起来卓越,这些功能特别有用。
功能:
Have I Been Pwned 风格的离线违规语料库匹配支持
具有单词分隔智能的密码短语模式
键盘布局感知的模式检测
区域设置感知的字符集处理
终端中的可视化评分条
风险分类的置信度分数
建议的更强密码生成器模式
两个候选密码的并排比较模式
规则调整模拟器
面向团队的批量整改报告
两个配置之间的策略差异模式
16. 建议的命令集
我可能会围绕这些命令构建 CLI:
password-architect audit
password-architect validate
password-architect score
password-architect inspect
password-architect export
17. 最终输出字段
每个密码结果应包含如下字段:
masked_password
raw_password_optional
cleaned_password
original_length
cleaned_length
entropy_estimate
score
strength_rating
policy_passed
failed_rules
passed_rules
warnings
findings
pattern_hits
dictionary_hits
sanitizer_actions
remediation_suggestions
source
line_number
18. DataGuard 内部的架构
此应用的 mega-app 角色将是:
dataguard/passwords.py 作为密码审计模块
它首先使用第 1 天的清理器
它共享与 Contacts 相同的报告和导出理念
它成为 DataGuard 管道内的凭证验证分支
分 5 个阶段共 50 步的实施计划,用于在 Python 中构建 DataGuard Password Strength Architect。
阶段 1 —— 基础与项目连接
1. 创建新的模块文件。
将密码模块添加到现有的 DataGuard 风格项目结构中。为模型、验证器、评分、导出、CLI 命令和资源创建文件。
2. 提前定义功能范围。
将首个生产版本锁定在这些核心能力上:清理、策略检查、正则模式检测、字典检查、评分、导出和 CLI 命令。
3. 重用现有的项目约定。
匹配在 Input Sanitizer 和 Contact Scrubber 中已使用的相同模式:配置驱动行为、结构化错误、可导出的数据类和一致的命令设计。
4. 添加 passwords.py 编排模块。
此文件应成为密码审计的中央管道协调器,类似于 contacts.py 协调联系人工作流的方式。
5. 创建密码 CLI 命令文件。
在 CLI 命令包下添加命令模块,如 password_audit.py, password_validate.py 和 password_export.py。
6. 添加密码相关的资源文件。
在 ``password_strength/data/`` 下发布内置弱密码列表、键盘模式、禁用标记和策略预设,以便它们随包一起安装。
7. 扩展包入口点。
在主 CLI 入口点注册新的密码命令,使它们表现为一流的 DataGuard 命令。
8. 为密码模块添加初版 README 部分。
记录密码系统的功能、运行方式以及它如何融入 DataGuard。
9. 在实现逻辑之前设定编码标准。
从一开始就决定到处使用类型提示、基于数据类的模型、严格的 linting 和测试覆盖。
10. 在注释或笔记中勾勒端到端管道。
写下执行顺序:读取输入 → 清理 → 解析密码 → 验证规则 → 检测模式 → 评分 → 分类 → 导出 → 报告。
阶段 2 —— 数据模型、配置与共享管道
11. 创建 PasswordCandidate 数据类。
这应保存原始密码、清理后的密码、源文件、行号、源行和清理器操作。
12. 创建 PasswordPolicyResult 数据类。
存储单个规则结果,如最小长度、大写字母存在、数字存在、特殊字符存在和失败的规则。
13. 创建 PasswordPatternResult 数据类。
存储模式命中,如连续字符、重复块、键盘模式、年份模式、类电子邮件字符串和弱标记。
14. 创建 PasswordScoreResult 数据类。
存储评分组件,如熵估计、惩罚、奖励、最终分数和强度标签。
15. 创建 PasswordAuditRecord 数据类。
这应是最终可导出的对象,包含掩码密码、分数、策略结果、发现、警告和元数据。
16. 创建 PasswordRunReport 数据类。
跟踪总数,如已处理密码、合规密码、弱密码、可疑密码、重复项、警告和退出码。
17. 为所有面向导出的模型添加 to_dict() 方法。
使每个主要结果对象可序列化为 JSON,并易于写入 CSV。
18. 扩展主配置模型。
添加特定于密码的配置值,如最小长度、字符要求、字典检查、密码短语模式、分数阈值和输出掩码。
19. 添加配置验证逻辑。
验证数字阈值是否合理,布尔值是否存在,以及允许的模式是否来自已知值。
20. 添加特定于密码的异常类。
为密码策略错误、无效密码配置、字典加载失败和不安全导出尝试创建自定义异常。
阶段 3 —— 输入接入与清理集成
21. 重用现有的输入加载器。
使用 DataGuard 其他地方已使用的相同设计,支持 --text, --file, --files, 和 --stdin。
22. 首先将所有输入标准化为 SourceDocument 对象。
这使密码审计与系统范围的接入模式保持一致。
23. 将每个文档通过第 1 天的清理器。
不要绕过清理。每个密码输入都应首先被,同时保留对变更内容的审计可见性。
24. 添加密码感知的清理行为。
仔细决定如何处理空格。例如,密码短语模式可能保留内部空格,而严格密码模式可能会标记它们。
25. 保留原始值和清理后的值。
在分析过程中切勿在内存中丢失原始密码输入,即使稍后在输出中将其抑制。
26. 从清理后的文档构建密码候选提取器。
对于批量文件,将每个非空清理行视为一个密码候选。
27. 为每个密码保留源元数据。
每个候选都应知道它来自哪个文件和行,以便报告可供审计。
28. 添加重复输入检测。
当同一密码在批次中多次出现时,将其记录为一项发现,并可选择作为策略违规。
29. 添加隐藏字符警告。
如果清理器移除了零宽度或不可见字符,请附加显式警告,因为这具有安全相关性。
30. 在 passwords.py 中添加预处理函数。
这应将清理后的文档转换为用于验证的 PasswordCandidate 对象列表。
阶段 4 —— 验证、模式检测与评分
31. 构建核心密码策略验证器。
检查最小长度、最大长度、必需大写、必需小写、必需数字、必需特殊字符和最小唯一字符。
32. 添加基于正则的重复字符检测。
检测包含明显连串如 aaaaaa 或 111111 的密码。
33. 添加基于正则的重复块检测。
检测如 abcabc, passpass, 或 121212 的模式。
34. 添加连续模式检测。
标记递增序列,如 abcd, 1234, 和类似的可预测结构。
35. 添加反向序列检测。
同时捕获 dcba, 4321, 和等效的反向可预测模式。
36. 添加键盘模式检测。
为 qwerty, asdf, zxcvbn 等字符串及其邻近变体创建资源驱动的匹配器。
37. 添加年份和日期模式检测。
标记包含如 2024, 2025 年份、常见生日或明显日期形状片段的密码。
38. 添加类电子邮件和类电话模式检测。
检测密码何时包含看起来像电子邮件地址、电话号码或个人标识符的内容。
39. 添加字典和禁用密码检查。
将标准化密码与常见密码列表和任何自定义组织特定禁用列表进行比较。
40. 为弱标记检查添加 Leetspeak 感知的标准化。
映射替换,如 @ → a, 0 → o, 1 → l/i, 3 → e,以便 P@ssw0rd 仍可被识别为弱。
阶段 5 —— 评分、导出、CLI 与生产加固
41. 构建评分引擎。
从基于长度和多样性的基础分数开始,然后减去模式、弱字典命中、重复和可预测性的惩罚。
42. 添加熵估计。
估计密码熵以支持更可辩护的最终分数和更丰富的解释。
43. 区分合规性与强度。
密码可以通过策略但仍可能较弱。同时返回策略结果和强度结果。
44. 添加分类层。
将每个密码分类为 compliant, weak, suspicious, 或 non_compliant。
45. 构建反馈引擎。
生成可操作的建议,如“增加长度”、“避免键盘序列”或“移除常见字典根词”。
46. 默认添加安全输出掩码。
在终端输出和导出中掩码明文密码,除非用户显式启用原始输出。
47. 实现 CSV, JSON, 和 JSONL 导出器。
重用项目的导出样式并编写结构化记录加运行摘要。
48. 为 audit, validate, 和 export 添加 CLI 命令。
每个命令应共享相同的底层管道,但为终端用户呈现不同的结果。
49. 添加结构化退出码和顶层错误处理。
为成功、警告、输入失败、配置错误和内部失败返回不同的代码,以便该工具能在自动化管道中工作。
50. 在完成之前编写完整的测试套件。
覆盖清理集成、策略检查、正则检测、字典检查、评分、导出、CLI 行为和失败案例,以便模块真正可用于生产。
# Password Strength Architect
第 3 天 —— 密码强度架构师
应用:密码策略审计器
## 概述
Password Strength Architect 是一个 Python CLI 应用程序,用于根据分层安全规则审计密码强度。它旨在成长为企业级密码分析工具,支持清理、策略验证、弱模式检测、字典情报、评分、可解释反馈、导出和批量审计。
长期目标是建立一个专业的密码审计工作流,能够:
- 接受一个或多个密码
- 清理不安全或格式错误的输入
- 验证策略合规性
- 检测弱结构模式
- 识别禁用和常见密码
- 估计熵
- 用可解释的推理对强度进行评分
- 导出结构化报告以用于自动化和审计工作流
## 当前项目状态
仓库当前包括:
- 可安装的 Python 包设置
- 根 CLI 入口点
- 专用的 `audit`, `validate`, 和 `export` 命令模块
- 中央密码管道编排模块
- 用于密码情报的内置资源文件
- 项目范围和约定文档
- 包结构和命令路由的早期测试覆盖
在此阶段,命令流和包结构已就位,而更深层的验证、评分和导出逻辑将在未来的提交中逐步添加。
## 包结构
```
password_strength/
├── __init__.py
├── cli.py
├── conventions.py
├── dictionary.py
├── exceptions.py
├── exporters.py
├── feedback.py
├── models.py
├── passwords.py
├── patterns.py
├── policy.py
├── resources.py
├── scope.py
├── data/
│ ├── banned_tokens.txt
│ ├── common_passwords.txt
│ ├── keyboard_patterns.txt
│ └── policies/
│ ├── default.json
│ └── strict.json
└── cli/
├── __init__.py
├── password_audit.py
├── password_export.py
├── password_score.py
└── password_validate.py
tests/
## 编码标准
This project uses a small but strict quality baseline from the start:
- **Ruff** for linting and import sorting
- **mypy** for static type checking
- **pytest** for automated tests
- **EditorConfig** for consistent whitespace and file formatting
### 安装 developer tools
```powershell
pip install -e .[dev]
## Pipeline stages
The application is designed around a stable 10-stage pipeline:
1. `read_input`
2. `sanitize_input`
3. `parse_passwords`
4. `validate_policy`
5. `detect_patterns`
6. `check_dictionary`
7. `score_passwords`
8. `classify_results`
9. `export_results`
10. `build_report`
This execution order is intentional and is preserved in the orchestration layer so future features can be added without changing the public flow of the application.
```
标签:API密钥检测, DevSecOps, Homebrew安装, Python, 上游代理, 信息熵计算, 凭证安全, 字典攻击检测, 安全基线, 安全规则引擎, 密码审计, 密码强度检测, 密码策略, 教学环境, 数据清洗, 数据管道, 文档结构分析, 无后门, 网络安全, 软件工程, 输入验证, 连续字符检测, 逆向工具, 键盘模式识别, 隐私保护