koushikchowdary6/sha1-password-cracking-project
GitHub: koushikchowdary6/sha1-password-cracking-project
一个多进程 Python 工具,通过字典攻击和模式枚举从无盐 SHA-1 哈希中恢复明文密码,用于演示 SHA-1 不适合密码存储的安全教学目的。
Stars: 1 | Forks: 0
# SHA-1 密码破解工具 🔓
一个多进程 Python 工具,用于演示为何 SHA-1 不适合用于
密码存储:无盐的 SHA-1 哈希很容易被字典和
基于模式的攻击攻破。给定一个包含 `user_id ` 对的文件,它会
恢复明文密码并报告成功率。
## 工作原理
破解器按顺序运行七种策略,并在成功恢复哈希值后提前停止:
1. **纯数字** — 长度至多为 `MAX_DIGIT_LEN` 的所有数字密码
2. **常见日期** — 跨越多个年份范围的 `YYYYMMDD`、`DDMMYYYY`、`MMDDYYYY`
3. **字典单词** — 直接查词表
4. **单词变形** — 首字母大写、全大写、反转、重复
5. **单词 + 数字组合** — 在前后追加数字及分隔符(跨 CPU 核心并行化)
6. **Leetspeak** — `a→4/@`、`e→3`、`i→1/!`、`o→0`、`s→5/$` 等
7. **词对组合** — 由常见分隔符连接的两个单词(并行化)
并行策略使用 Python 的 `multiprocessing.Pool`,其大小根据
机器的 CPU 数量决定。
## 运行说明
```
python3 project.py
```
它会读取 `passwords.txt`(目标哈希)和 `dictionary.txt`(
词表),这两者均作为小型演示数据集包含在内,并将恢复的
密码写入 `cracked_passwords.txt`。
### 输入格式
`passwords.txt` — 每行一个目标:
```
1 7c4a8d09ca3762af61e59520943dc26494f8941b
2 9bcea4483a009e15aa649981c183c5819dd9e185
```
`dictionary.txt` — 每行一个候选单词。
## 演示结果
针对内置的 10 条演示数据(每种策略对应一个密码),该工具
在典型的笔记本电脑上只需**约 2 秒即可恢复 10/10**:
```
--- Cracking Summary ---
Total hashes loaded: 10
Total passwords cracked: 10
Hashes remaining: 0
```
## 调优
`project.py` 顶部的两个常量用于在覆盖率和运行时间之间进行权衡:
| 常量 | 默认值 | 效果 |
|---|---|---|
| `MAX_DIGIT_LEN` | 6 | 暴力破解的最长纯数字密码(每增加 1 速度约慢 10 倍) |
| `MAX_APPEND_DIGITS` | 3000 | 在单词+数字组合中尝试的数字范围 |
对于更难破解的目标可以调高它们,但请注意,仅 `MAX_DIGIT_LEN = 8` 就意味着
需要进行 10^8 次哈希计算——耗时是分钟级,而非秒级。
## 安全启示
这正是现代系统不使用快速、无盐的
哈希来存储密码的原因。请使用缓慢、带盐且对内存要求高的算法 —— **Argon2id**(或 bcrypt/scrypt)
—— 这样每次猜测的成本都很高,且预计算/彩虹表也会失效。
此外,SHA-1 存在已知的碰撞弱点(SHAttered,2017),并且已
被弃用于安全用途。
## 作者
Koushik Chowdary — [LinkedIn](https://linkedin.com/in/koushik-chowdary) · [GitHub](https://github.com/koushikchowdary6)
标签:DOS头擦除, Python, SysWhispers, VEH, 多进程, 字典攻击, 密码破解, 无后门, 逆向工具