你的"强密码"可能 3 秒就能被破解:聊聊密码熵这件事

火力盒子技术专栏 · 本文提到的工具全部免费、在浏览器本地运行:https://www.ahotbox.com

"请设置包含大小写字母、数字和符号的 8 位以上密码"——你肯定见过这个提示。但很多人照做了,密码照样不安全。问题不在长度,而在可预测性。

密码强度的本质:熵

密码强度的度量叫"熵",单位是比特,计算公式很简单:

熵 = log2(字符集大小) × 长度

一个 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())生成,而且全程本地运行,生成的密码不会经过网络。

站长视角:别再裸奔存储密码

作为开发者,用户密码到你手里之后怎么办?三条铁律:

  1. 绝不明文存储。数据库被拖库是常态,不是意外。
  2. 用慢哈希 + 自动盐:bcrypt、scrypt、Argon2,不要用 MD5/SHA256 直接哈希密码。快哈希是给文件校验用的,不是给密码用的——快恰恰是弱点。
  3. 前端不必强行限制字符:限制"符号不能用"只会降低熵。真正该做的是服务端限制最小长度和对接密码强度检测。

顺手测一下自己常用密码模式的熵:密码强度检测(本地计算,输入不会上传——毕竟测完的密码不该留在别人服务器上)。

实用建议清单


关于火力盒子:ahotbox.com 收录 1000+ 款免费纯前端工具(安全、开发、文本、时间、生成器等),所有数据在浏览器本地处理,无需注册、不上传数据、支持离线使用。

发布建议:公众号直接使用本文;CSDN/掘金可拆成《密码存储的正确姿势:bcrypt 与熵》技术向;知乎适合回答"什么样的密码最安全"。
💡 关于火力盒子:ahotbox.com 收录 1000+ 款免费纯前端在线工具(开发、文本、时间、生成器、安全等),所有数据在浏览器本地处理,无需注册、不上传数据、支持离线使用。