密码强度检测

看一个密码到底有多难猜。按长度和字符类别估算熵,再把常见词和规律扣掉,给出保守的结论。

熵为什么不够用

教科书里的算法是「长度 × log2(字符集)」,但它假设每个字符都是独立随机选的。真实密码不是:Password123 有 11 位、大小写加数字,朴素熵约 65 比特,看起来还行,实际上字典里排得很靠前,规则攻击几乎立刻命中。所以这里会先检查常见密码表(包括 leetspeak 变形,比如 p@ssw0rd),命中就按它在表里的排名重新估算,排名第一的密码实际只有 1 比特。

没有命中的还会继续查结构:整串是不是某个短块的重复(abcabcabc 只有 3 位的信息量)、有没有 1234、abcd 这样的顺序串、有没有 qwerty、asdf 这样的键盘连排、有没有 19xx / 20xx 年份,以及是不是只有三四种不同字符。每命中一项都会扣掉相应的比特,最后得到的有效熵才是评分依据。

破解时间怎么读

时间用「平均尝试半个搜索空间」估算:可能的组合数是 2 的熵次方,平均试一半就能撞上。在线撞库按每秒 100 次算,这是有速率限制的登录接口的量级;离线爆破按每秒 100 亿次算,对应现代显卡跑快速哈希。所以同一个密码会看到两个差很多的时间——这不是矛盾,而是攻击方式不同。系统如果用 bcrypt、argon2 这类慢哈希,离线速度会慢几个数量级,实际安全得多。

这页给的是保守估计,不是承诺。真正的风险往往不在「能不能暴力破解」,而在复用、钓鱼和数据泄露。一个 100 比特的密码如果和别的网站共用,对方被拖库时它一样会出现在泄露列表里。建议用随机密码生成给每个网站生成独立的密码,交给密码管理器保存,并给重要账号开两步验证。想检查字符串里有没有藏敏感信息,可以用数据脱敏。

安全提醒

真实密码请只在密码管理器里操作,不要粘到任何网页里验证。

常见问题

这个分数是怎么算的?

先按实际出现的字符类别估一个字符集大小,长度乘 log2(字符集) 得到朴素熵;再对常见密码、整串重复、顺序串、键盘连排、年份这些可被字典和规则攻击吃掉的部分做折扣,得到「有效熵」。评分看的是有效熵,所以 password123 这类再长也只有个位数分数。

为什么 8 位混合密码不如 20 位小写密码?

因为熵主要靠长度。8 位混合字符约 52 比特,20 位纯小写约 94 比特,后者难猜得多。而且长密码可以写成一句好记的话,不用记随机串。前提是这句话不常见、不引用歌词或名言,否则会被专门针对短语的字典命中。

破解时间里的每秒多少次是怎么来的?

在线撞库按每秒 100 次,对应有速率限制的登录接口;离线爆破按每秒 100 亿次,对应现代 GPU 跑 MD5、SHA-1 这类快速哈希。如果目标系统用的是 bcrypt、scrypt 或 argon2,单次验证慢几个数量级,实际时间会显著变长。反过来,如果密码已经被泄露过,任何速度都不重要了。

包含中文或空格的密码能用吗?

技术上可以,而且字符集大、熵高。风险在兼容性:部分老系统会拒绝非 ASCII 字符或空格,某些输入法在密码框里还会触发联想。真要使用,先在目标系统上实测一遍登录和找回流程。

强密码还需要注意什么?

不要复用。一个强密码用在十个网站,任何一家泄露都等于全泄露,这是比强度更常见的问题。给重要账号开两步验证,密码交给密码管理器生成和保存。要批量生成随机密码,用随机密码生成。

相关:随机密码生成