8 位密码几秒被破?先说清熵怎么算
一、熵 = log₂(字符集 ^ 长度)
字符集大小取决于用了哪几类字符:
| 用到的字符 | 字符集大小 |
|---|---|
| 纯数字 | 10 |
| 纯小写字母 | 26 |
| 大小写字母 | 52 |
| 大小写 + 数字 | 62 |
| 大小写 + 数字 + 符号 | 95 |
| 含中文(保守计) | 100 |
熵就是「需要猜多少次」的以 2 为底的对数,单位 bit。长度每多一位,搜索空间乘字符集大小——这是后面所有结论的来源。
二、10 个口令实测(按离线 GPU 每秒 100 亿次、取搜索空间一半估算)
| 口令 | 字符集 | 熵 | 估算破解时间 |
|---|---|---|---|
| 123456 | 10 | 5.91 bit | 瞬间 |
| 12345678 | 10 | 6.32 bit | 瞬间 |
| aaaaaaaa | 26 | 4.70 bit | 瞬间 |
| abc123 | 36 | 31.02 bit | 0.1 秒 |
| password | 26 | 37.60 bit | 10 秒 |
| qwerty123 | 36 | 46.53 bit | 约 1.4 小时 |
| Abc12345 | 62 | 47.63 bit | 约 3 小时 |
| 你好世界你好世界 | 100 | 31.89 bit | 0.2 秒 |
| Tr0ub4dor&3 | 95 | 72.27 bit | 约 9000 年 |
| Xk7#pQ2$vL9m | 95 | 78.84 bit | 约 86 万年 |
几处需要解释:
12345678的熵只有 6.32 bit,而不是 log₂(10⁸) ≈ 26.6 bit——连续序列会被直接识破,估算时按「起点 × 长度」算,也就是 10 × 8。aaaaaaaa按单字符计,字符集 26 乘长度 1。你好世界你好世界重复了「你好世界」两遍,去重后码点数太少,熵打 6 折。password虽然是 8 位纯字母,熵却比abc123高,因为 26⁸ 比 36⁶ 大得多。字典能不能命中是另一回事。
三、长度比复杂度值钱
同样 8 位:纯数字 10⁸,大小写加数字 62⁸,差 6 个数量级——看起来复杂度很有用。但换个比法:把长度加 1 位,搜索空间直接乘 62;而把字符集从 10 扩到 95,只乘 9.5。
所以:与其在 8 位里纠结用不用符号,不如把长度拉到 12 位以上。
四、三条能落地的规矩
- 一个站点一个密码,不复用。泄露撞库比暴力破解现实得多。
- 重要账号开两步验证。密码真泄露了,验证码这道还能拦一下。
- 别用生日、手机号、姓名拼音。这类信息在社工库里现成,熵再高也没意义。
五、这个估算测不出来的东西
工具是纯本地计算、不联网,所以它不查泄露密码库。如果密码是常见词或已经出现在泄露库里,真实强度会低于显示的档位。同样测不出来的还有:是否被复用、是否被键盘记录或钓鱼拿到。
估算假设是离线 GPU 每秒 100 亿次试探。真实攻击者会先跑字典和常见口令组合,所以表里的秒数应当理解为「不考虑字典的暴力破解时间」。
六、直接算
→ 密码强度检测:熵、字符集、档位与改进建议
→ 随机密码生成:按长度与字符类型生成,可用即弃
→ UUID 生成:需要一个不可预测的随机标识时用
延伸阅读:密码复用才是最大风险:管理器与两步验证——撞库原理、密码管理器与迁移顺序。
本站文章为个人使用经验的原创整理,除已注明来源的引用外均为本人撰写。文中涉及的软件名称、商标、截图等归各自权利人所有,引用仅用于说明与交流。如认为本站内容侵犯了你的合法权益,请通过「关于本站」页面的联系方式告知,核实后将及时更正或删除。