本密码生成器的不同之处
许多在线生成器在服务端生成密码(密码会离开您的电脑),或使用并不安全的 Math.random()。两者都无法满足真正的安全需求。
- 真随机:
crypto.getRandomValues 提供密码学级可靠的随机数,并由拒绝采样消除取模偏差。
- 完全离线:无
fetch,无第三方脚本,无 CDN,无 Cookie,无 LocalStorage。
- 单文件:仅 HTML、CSS 与 JavaScript。您可以保存页面并离线使用。
- 透明:源代码可见、可读(右键"查看页面源代码")。
- 不存储:关闭标签页后密码即消失,无历史,无痕迹。
如何选择真正安全的密码
首要法则:长度胜过复杂度。一个长密码在数学上比一个含大量特殊字符的短密码更安全。
- 普通账户至少 16 字符,邮箱、银行、主密码与服务器登录使用 24 至 32 字符。
- 每个服务使用独立密码。一个供应商被攻破,您的其他账户仍然安全。
- 使用密码管理器(例如 KeePassXC、Bitwarden、1Password)。您只需记住一个强主密码。
- 尽可能启用双因素认证。
- 切勿重复使用密码,也不要套用固定模板(例如
Sommer2024!),字典攻击几秒就能破解。
攻击者破解需要多久?
在离线攻击中(攻击者拿到泄露的密码哈希并在本地穷举所有组合),现代 GPU 集群每秒可尝试约 1 万亿次(针对 MD5、SHA-1 等较弱哈希)。对于 bcrypt 或 Argon2 等优良算法则远低于此,但这里我们采用保守估算。
| 长度 |
字符集 |
可能性 |
破解时间(每秒 1 万亿次) |
| 8 | 仅小写字母 | 2 · 1011 | 0.2 秒 |
| 8 | 字母 + 数字 | 2 · 1014 | 3 分钟 |
| 12 | 字母 + 数字 | 3 · 1021 | 100 年 |
| 16 | 字母 + 数字 | 5 · 1028 | 15 亿年 |
| 20 | 字母 + 数字 | 7 · 1035 | 10²² 年 |
| 32 | 字母 + 数字(默认) | 2 · 1057 | 实际上无限 |
数值已四舍五入,按 62 个可能字符(a 至 z、A 至 Z、0 至 9)和每秒 10¹² 次尝试估算。