shakhsg/password-generator
GitHub: shakhsg/password-generator
一款使用 Python secrets 模块的密码学安全密码生成与强度分析 CLI 工具,支持熵值评分、策略验证和 passphrase 模式。
Stars: 0 | Forks: 0
# 🔐 Password Guardian
[](https://python.org)
[](LICENSE)
[](https://docs.python.org/3/library/secrets.html)
## ✨ 功能
| 功能 | 详情 |
|---|---|
| 🔒 **CSPRNG 生成** | 使用 Python 的 `secrets` 模块 — 基于操作系统级熵,而非 `random` |
| 📊 **熵值评分** | 以比特为单位的香农熵,以及在 10¹² 次猜测/秒条件下的破解时间估算 |
| ✅ **正则表达式验证** | 标准 / 强 / 极度偏执 / 企业级策略预设 |
| 🎨 **丰富的终端 UI** | 具备强度计、图标和表格的全彩界面 |
| 🔤 **Passphrase 模式** | 包含可配置分隔符且易于记忆的多个单词组成的 passphrase |
| ⚙️ **高度可定制** | 长度、字符集、排除易混淆字符、安全符号、批量模式 |
| 🏗️ **模块化设计** | `generator`、`checker`、`validator` — 可导入到你自己的项目中 |
## 📁 项目结构
```
password-guardian/
├── main.py CLI entry point + interactive UI
├── generator.py Secure password generation engine
├── checker.py Entropy + strength analysis
├── validator.py Regex-based policy enforcement
├── requirements.txt
└── README.md
```
## 🚀 快速开始
```
# Clone
git clone https://github.com/shakhsg/password-generator.git
cd password-generator
# Install (rich 可选,但能让输出更美观)
pip install -r requirements.txt
# 运行 interactive mode
python main.py
# 快速生成 24 字符密码
python main.py --generate -l 24
# 检查现有密码的强度
python main.py --check
# 生成 10 个密码,包含 safe symbols,无 ambiguous chars
python main.py --batch 10 -l 20 --safe-symbols --no-ambiguous
# 生成 5 词 passphrase
python main.py --passphrase -w 5
```
## 🧠 工作原理
### 熵值计算
```
H = L × log₂(N)
H = entropy in bits
L = password length
N = charset size (26 upper + 26 lower + 10 digits + 32 symbols = 94 max)
```
| 熵值 | 强度 | 破解时间 (10¹² /秒) |
|---|---|---|
| < 36 bits | 弱 | 几秒到几分钟 |
| 36–60 bits | 一般 | 几小时到几个月 |
| 60–80 bits | 强 | 几年到几个世纪 |
| 80–100 bits | 非常强 | 数百万年 |
| 100+ bits | 传说级 | 数十亿年 |
### 强度扣分项
- 常见密码(内置的最常用密码黑名单)
- 重复字符(`aaa`、`111`)
- 连续模式(`123`、`abc`、`qwerty`)
- 键盘路径(`qazwsx`、`asdfgh`)
- 年份模式(`1999`、`2024`)
### 安全生成机制
在通过 `secrets.choice()` 提取的字符基础上,使用**加密安全的 Fisher-Yates 洗牌算法**:
1. 从每个字符类别中选取所需的最少字符(`min_upper`、`min_lower`、`min_digit`、`min_symbol`)
2. 使用完整字符集中的随机字符填充剩余空位
3. 安全地打乱合并后的列表
4. 结果:每种排列出现的概率均等
## 🔧 作为库使用
```
from generator import PasswordGenerator, GeneratorConfig
from checker import StrengthChecker
from validator import PasswordPolicy
# Generate
gen = PasswordGenerator()
result = gen.generate(GeneratorConfig(length=20, use_safe_symbols=True))
print(result.password) # e.g. Xk#9mP!vQn@2rLwY#8dT
print(result.entropy_bits) # e.g. 131.1
# Check
checker = StrengthChecker()
report = checker.check(result.password)
print(report.label) # Very Strong
print(report.crack_time_label)# Millions of years
# Validate
policy = PasswordPolicy.from_preset("enterprise")
result = policy.validate(result.password)
print(result.passed) # True / False
print(result.violations) # List of failed rules
```
## 📋 CLI 参考
```
python main.py [OPTIONS]
Options:
--generate Quick generate mode
--check Check an existing password's strength
--passphrase Generate a passphrase
--batch N Generate N passwords at once
-l, --length N Password length (default: 16)
--no-symbols Exclude all symbols
--safe-symbols Use safe symbols only (!@#$%^&*-_=+)
--no-ambiguous Exclude O, 0, I, l, 1
-w, --words N Number of words in passphrase (default: 4)
```
## 🔒 安全说明
- **绝不**使用 Python 的 `random` 模块 — 专门且仅使用 `secrets`
- 密码绝对不会被记录、存储或传输
- 最低熵值目标:针对敏感账户为 **80 bits**(非常强)
- Passphrase 熵值:约 6.4 bits/单词 × 4 个单词 ≈ 25.5 bits(用于敏感机密时建议使用 6 个及以上单词)
## 📜 许可证
MIT © 2024 [shakhsg](https://github.com/shakhsg) — 可自由使用、修改和分发。
标签:Python, 密码学, 密码强度检测, 密码生成器, 手动系统调用, 无后门, 逆向工具