你的"强密码"可能 3 秒就能被破解:聊聊密码熵这件事
火力盒子技术专栏 · 本文提到的工具全部免费、在浏览器本地运行:https://www.ahotbox.com
"请设置包含大小写字母、数字和符号的 8 位以上密码"——你肯定见过这个提示。但很多人照做了,密码照样不安全。问题不在长度,而在可预测性。
密码强度的本质:熵
密码强度的度量叫"熵",单位是比特,计算公式很简单:
熵 = log2(字符集大小) × 长度
- 纯小写字母(26 个字符集):每个字符 ≈ 4.7 比特
- 大小写+数字(62 个):每个字符 ≈ 5.95 比特
- 大小写+数字+符号(95 个):每个字符 ≈ 6.57 比特
一个 8 位的"Abc@1234"看起来很"强",实际熵只有约 52 比特。而 Tr0ub4dor&3 这种经典"伪强密码"更惨——它出自密码学教材的反面案例:把 o 换成 0、a 换成 4 是攻击者字典里早就有规则,实际熵远低于表面值。
暴力破解有多快?
以现代 GPU 集群对常见哈希算法(如未经加盐的 MD5)的破解速度估算:
| 密码 | 熵 | 破解时间(量级) |
|---|---|---|
123456 | ~0 | 秒出(就在字典里) |
Abc@1234(8位) | ~52 比特 | 小时级 |
X7#kQ2$mLp(10位纯随机) | ~66 比特 | 年级 |
| 20 位纯随机(含符号) | ~131 比特 | 宇宙热寂都等不完 |
结论:密码强度主要看长度和随机性,"花式替换字母"贡献不了多少熵,反而让你记不住。
更大的坑:人的"随机"不随机
人类说"我随机想一个密码",实际选择高度可预测:喜欢用生日、名字+年份、键盘走位(!@#$%^&*)、常见单词组合。彩虹表和字典攻击的规则集就是照着人类习惯建的。
真正的随机必须由机器产生,比如密码管理器的生成器,或密码生成器工具这类本地随机生成的小工具——它用浏览器的加密级随机数(crypto.getRandomValues())生成,而且全程本地运行,生成的密码不会经过网络。
站长视角:别再裸奔存储密码
作为开发者,用户密码到你手里之后怎么办?三条铁律:
- 绝不明文存储。数据库被拖库是常态,不是意外。
- 用慢哈希 + 自动盐:bcrypt、scrypt、Argon2,不要用 MD5/SHA256 直接哈希密码。快哈希是给文件校验用的,不是给密码用的——快恰恰是弱点。
- 前端不必强行限制字符:限制"符号不能用"只会降低熵。真正该做的是服务端限制最小长度和对接密码强度检测。
顺手测一下自己常用密码模式的熵:密码强度检测(本地计算,输入不会上传——毕竟测完的密码不该留在别人服务器上)。
实用建议清单
- 密码长度 ≥ 14 位,纯随机生成
- 每个重要账户独立密码(靠密码管理器记住)
- 开启两步验证(2FA),它比任何密码技巧都管用
- 服务端哈希用 bcrypt/Argon2,绝不 MD5
关于火力盒子:ahotbox.com 收录 1000+ 款免费纯前端工具(安全、开发、文本、时间、生成器等),所有数据在浏览器本地处理,无需注册、不上传数据、支持离线使用。
发布建议:公众号直接使用本文;CSDN/掘金可拆成《密码存储的正确姿势:bcrypt 与熵》技术向;知乎适合回答"什么样的密码最安全"。
💡 关于火力盒子:ahotbox.com
收录 1000+ 款免费纯前端在线工具(开发、文本、时间、生成器、安全等),所有数据在浏览器本地处理,无需注册、不上传数据、支持离线使用。