一串 16 位的纯数字密码,理论熵是 16 × log₂10 ≈ 53.1 比特;一串 8 位、从 95 个可见字符里随机挑出来的密码,熵是 8 × log₂95 ≈ 51.9 比特。长度翻了一倍,强度几乎原地踏步。把这两个数丢给一台每秒能试一万亿次密码的显卡:前者约 2.5 小时被穷举完,后者约 40 分钟。安全与否从来不由「位数」单独决定,决定它的是熵——猜中一次平均要试多少个候选。这笔账可以一层层算开。
熵怎么算:字符集取对数,再乘长度
信息论用「比特」衡量猜测难度:n 个等可能的候选,需要 log₂n 比特才能唯一确定。密码的候选总数是字符集大小 N 的 L 次方(L 为长度),所以熵
H = L × log₂N
每个数字只值 log₂10 ≈ 3.32 比特;每个小写字母值 log₂26 ≈ 4.70 比特;大小写加数字共 62 个字符,每个值 5.95 比特;再加 32 个常见符号到 94~95 个,每个约 6.55 比特。注意每多写一个字符的「进账」完全取决于字符集——3.32 与 6.55 差近一倍,这就是长度错觉的全部来源。
四类密码放在同一把尺子上
摆在一起算:8 位随机混合(95 字符集)≈ 51.9 比特;16 位纯数字 ≈ 53.1 比特;16 位随机小写 = 16 × 4.70 ≈ 75.2 比特;从 7776 词表里随机抽 6 个单词组成的骰子口令 = 6 × log₂7776 = 6 × 12.95 ≈ 77.7 比特。排序很反直觉:纯数字怎么加长,每个字符也只进账 3.32 比特;而骰子口令三十来个字符看着吓人,真正的来源是每个单词携带近 13 比特的不可预测性。长度只是外壳,每个成分真正随机、候选集够大,才是内核。
理论熵常常虚高,因为设密码的是人
上面的公式都建立在「每个字符均匀随机」的前提上,真实密码远没这么足量。Password@2026 有 13 个字符,理论熵 13 × 6.55 ≈ 85 比特,但它的生成规则是「常见单词+首字母大写+@+年份」:攻击者不穷举字符集,只穷举词典 × 大写位置 × 几种符号 × 二十来年份,全部组合不到 2 的 30 次方。泄露库的统计更直接:取前 1 亿条最常见密码也就覆盖 27 比特左右的空间,离线破解一小时都用不了。正因如此,NIST 在 SP 800-63B 里废掉了「必须含符号、每 90 天换一次」这类老规矩,改为长度下限加弱口令黑名单——复杂的组成要求只抬高了理论熵,实际随机性反而被人的取巧习惯挤掉了。
比特数换算成攻击时间
拿 2 的 H 次方除以攻击者的试错速度就是答案,场景不同结论天差地别。在线尝试被限速成每秒 1 次的话,30 比特意味着 2 的 30 次方 ≈ 10.7 亿秒,约 34 年,足够安全。可数据库泄露后的离线攻击完全是另一个量级:一块高端 GPU 对 NTLM 这类快哈希能跑到每秒一万亿次以上,此时 40 比特约 1 秒,50 比特约 19 分钟,60 比特约 13 天,70 比特约 37 年,80 比特要 3.8 万年。对存明文哈希或弱哈希的系统,60 比特以下的密码已经守不住,80 比特才算及格线。
小结:长度仍是普通人最可靠的杠杆
回到标题的问题:越长越安全吗?只有当新增的每个字符都保持高随机度时才成立。三条实用结论:交给密码管理器生成并保存的,16 个字符取 95 字符集,熵 104 比特,随便什么场景都够;必须自己记住的主密码,用三四个不相干的长词拼成短语,靠长度堆熵最不容易出错;系统本身用 bcrypt、Argon2 这类慢哈希时,攻击速度骤降到每秒几十次,熵的要求可以适度放宽。想核对手头密码的成色,可以打开本站 /password 页,输入即出字符集、熵值和在离线穷举下的预计撑持时间。