onest4rk/password-toolkit

GitHub: onest4rk/password-toolkit

面向教育和审计的 Python 密码安全工具包,集成密码强度分析、哈希类型识别与离线字典破解功能。

Stars: 0 | Forks: 0

# 密码安全分析与破解工具 ## 免责声明 **本工具仅用于教育、CTF 以及审计您自己的系统。** 它针对您提供的哈希值执行离线破解。它不会与任何实时登录表单、在线服务或您不拥有的系统进行交互。将其用于您不拥有的帐户是非法且不道德的。 ## 为什么密码安全很重要 弱密码是数据泄露中的首要攻击媒介。当公司使用快速哈希(MD5、SHA-1)存储密码时,泄露数据库的攻击者可以在几分钟内破解数百万个密码。了解密码破解的工作原理对于构建安全系统至关重要——您需要知道自己要防御什么。 ## 架构 ``` password_toolkit/ ├── password_toolkit/ │ ├── __init__.py │ ├── hash_utils.py # Hash type identification │ ├── strength_analyzer.py # Password strength analysis │ ├── cracker.py # Dictionary + rule-based cracker │ ├── wordlists/ │ │ ├── sample.txt # Small test wordlist │ │ └── README.md # Instructions for downloading rockyou.txt │ └── tests/ │ ├── test_hash_utils.py │ ├── test_strength_analyzer.py │ └── test_cracker.py ├── requirements.txt └── README.md ``` ### 模块职责 | 模块 | 用途 | |--------|---------| | `hash_utils.py` | 通过字符串格式(长度、字符集、前缀模式)识别哈希类型 | | `strength_analyzer.py` | Shannon 熵、模式检测、破解时间估算、强度评分 | | `cracker.py` | 基于字典的破解,支持变形规则和多进程 | ## 安装说明 ``` # 克隆仓库 git clone cd password_toolkit # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt ``` ### 验证安装 ``` # 运行测试 pytest password_toolkit/tests/ -v # 测试 hash 识别 python -m password_toolkit.hash_utils "5d41402abc4b2a76b9719d911017c592" # 测试 strength analyzer python -m password_toolkit.strength_analyzer --password "MyP@ssw0rd!" ``` ## 使用示例 ### 1. 哈希识别 ``` $ python -m password_toolkit.hash_utils "5d41402abc4b2a76b9719d911017c592" Analyzing: 5d41402abc4b2a76b9719d911017c592 Length: 32 characters Algorithm Confidence Reasoning ------------------------------------------------------------------------ MD5 high 32 hex characters. Input has 32 characters all hexadecimal matches MD5 length (32). ``` ### 2. 密码强度分析 ``` $ python -m password_toolkit.strength_analyzer --password "password123" ============================================================ PASSWORD STRENGTH ANALYSIS ============================================================ Password: *********** (11 chars) Rating: WEAK ============================================================ Shannon Entropy: 2.85 bits Combinatorial Entropy: 64.56 bits Charset Size: 36 characters ISSUES FOUND (2): ---------------------------------------------------- [!!!] This is one of the most commonly used passwords. [ ! ] Contains sequential characters '123'. CRACK TIME ESTIMATES: ---------------------------------------------------- Algorithm Rate Est. Time ---------------------------------------------------- MD5 10,000,000,000/s < 1 millisecond bcrypt 30,000/s 340 days RECOMMENDATION: This password is in a common password list — it would be cracked instantly. Use at least 12 characters for strong protection. Against MD5: cracked in ~< 1 millisecond. Against bcrypt: ~340 days. ``` ### 3. 密码破解 ``` # 生成测试 hash $ python -c "import hashlib; print(hashlib.md5(b'password').hexdigest())" 5d41402abc4b2a76b9719d911017c592 # 破解它 $ python -m password_toolkit.cracker \ --hash 5d41402abc4b2a76b9719d911017c592 \ --type md5 \ --wordlist password_toolkit/wordlists/sample.txt Target hash: 5d41402abc4b2a76b9719d911017c592 Algorithm: MD5 Wordlist: password_toolkit/wordlists/sample.txt (30 words) Workers: 8 Rules: 9 rule sets applied per word ──────────────────────────────────────────────────── Cracking... FOUND! Password: password Stats: Words tested: 30 Hashes checked: ~300 (with rules) Time elapsed: 0.02s Speed: 1,500 words/sec ``` ## 概念说明 ### 哈希 vs 加密 - **哈希** 是一种单向函数:输入 → 固定大小的输出。您无法将其逆转。`sha256("hello")` → `2cf24dba...` 是永久且不可逆的。 - **加密** 是双向的:您可以使用密钥进行加密和解密。`AES(plaintext, key)` → ciphertext → `AES_decrypt(ciphertext, key)` → plaintext。 密码应该被**哈希处理**,永远不要加密。如果攻击者窃取了数据库,他们不应该能够恢复原始密码。 ### 什么是 Salt? **Salt** 是在哈希之前添加到密码中的随机数据: ``` hash = SHA256(salt + password) ``` 如果没有 salt,每个使用密码 "password" 的用户都会得到相同的哈希值。攻击者可以预先计算常见哈希的“彩虹表”。Salt 迫使攻击者单独破解每个用户。 现代系统(bcrypt、Argon2)会自动处理 salt。 ### 为什么 bcrypt/Argon2 > MD5/SHA1 | 算法 | 速度 (GPU) | 类型 | 为什么重要 | |-----------|------------|------|----------------| | MD5 | ~100 亿/秒 | 快速哈希 | 攻击者每秒可以尝试 100 亿个密码 | | SHA-256 | ~30 亿/秒 | 快速哈希 | 仍然太快 | | bcrypt | ~3 万/秒 | 慢速哈希 | 比 MD5 慢 30 万倍 | | Argon2id | ~1 千/秒 | 内存密集型 | 旨在抵御 GPU/ASIC 攻击 | **关键洞察**:“快速”的哈希是一种*糟糕的*密码哈希。MD5 的速度是用于校验文件的一个特性,但对密码来说却是一个漏洞。bcrypt 和 Argon2 有意设计得缓慢且消耗大量内存,使得暴力破解攻击变得不切实际。 ### 什么是熵? 熵以位为单位衡量密码的**不可预测性**。 - 每一位熵都会使攻击者必须搜索的密钥空间翻倍。 - **Shannon 熵**:根据字符频率衡量信息内容。 - **组合熵**:`log2(charset_size ^ length)` —— 假设从字符集中进行随机选择。 一个具有 80 位熵的密码需要约 2^80 次操作才能暴力破解——这在计算上是不可行的。 | 熵 | 强度 | 暴力破解时间 (100 亿哈希/秒) | |---------|----------|-------------------------------| | 28 位 | 弱 | 0.004 秒 | | 40 位 | 一般 | 10 秒 | | 60 位 | 强 | 3 年 | | 80 位 | 非常强 | 190 亿年 | | 128 位 | 极致 | 10^23 年 | ## 性能基准 在现代 CPU(Ryzen 7 / 同等 i7,8 核)上测试: | 字典 | 词数 | 规则 | 哈希数 | MD5 耗时 | 速度 | |----------|-------|-------|--------|----------|-------| | sample.txt | 30 | 9 | ~300 | <0.01s | ~1,500 词/秒 | | 10k-most-common | 10,000 | 9 | ~90K | 0.06s | ~1.5M 词/秒 | | rockyou.txt (14M) | 14M | 9 | ~126M | 85s | ~1.7M 词/秒 | *注意:使用 GPU(RTX 3080)的真实 hashcat:~100 亿 MD5 哈希/秒。此 Python 工具用于学习——hashcat 用于生产环境的破解。* ### MD5 与 bcrypt 破解速度对比 | 密码 | 字符集 | 密钥空间 | MD5 | bcrypt | 比率 | |----------|---------|----------|-----|--------|-------| | 6 字符小写 | 26 | 308M | 0.03s | 2.8 年 | 慢 3T 倍 | | 8 字符混合 | 62 | 218T | 5.4 年 | 2.3M 年 | 慢 430K 倍 | | 10 字符混合 | 62 | 839P | 2,100 年 | 890M 年 | 慢 420K 倍 | ## 未来改进 - **GPU 加速**:通过子进程集成 hashcat 以实现生产级破解速度 - **Argon2/bcrypt 破解**:增加对验证 bcrypt/argon2 哈希的支持(设计上很慢) - **Web UI**:用于交互式分析的 Flask/Streamlit 界面 - **规则引擎**:实现兼容 Hashcat 的规则文件(.rule 格式) - **彩虹表检测**:当哈希出现在已知的泄露数据库中时发出警告 - **在线检查器集成**:查询 Have I Been Pwned API 以检查哈希是否出现在已知的泄露中 - **GUI 应用程序**:带有拖放哈希输入功能的 Tkinter/PyQt 桌面应用 - **批处理模式**:通过共享字典缓存同时破解多个哈希 ## 运行测试 ``` pytest password_toolkit/tests/ -v # 带 coverage pytest password_toolkit/tests/ --cov=password_toolkit --cov-report=term-missing ``` ## 许可证 MIT —— 请负责任地使用。仅针对您拥有或获得明确破解许可的密码和哈希进行测试。
标签:DOS头擦除, VEH, 哈希识别, 字典攻击, 安全规则引擎, 密码分析, 密码强度检测, 密码破解, 逆向工具