暴力破解时间计算器

按口令长度与字符集规模估算逐位穷举需要的平均时间:空间等于字符集的长度次方,平均要试到一半才撞上,所以期望时间是空间除以两倍速率。页面同时给出理论空间与真人实际熵的差距,以及慢哈希把速率压下来之后的效果。

默认:8 位 × 62 字符集,空间 218340105584896,熵 47.6335704831 位。
长度 8 × 字符集 62 空间 218340105584896 熵 47.6335704831 位 速率 1000000 次/秒 平均命中时间 109170052.792 秒 = 3.45946125571 年 -- 对照 -- 在线限速 10 次/秒:345946.125571 年 集群 1e10 次/秒:0.000345946125571 年 bcrypt cost=12(3.33 次/秒):1037838.37671 年
长度与字符集对照表共 20 行,默认显示 12 行。

超过 1e15 的空间按科学计数法给出并注明量级估计:双精度只有 53 位有效尾数,再写完整数字是假的。整页不联网、不上传。

使用方法

  1. 打开页面已经填好 8 位长度、62 字符集、单机 GPU 1e6 次/秒,结果区给出平均命中时间。点「估算」,或在数字框里按回车,结果立刻刷新。
  2. 「口令长度」范围 1 到 64,步长 1。填了小数或超出范围会给出指明原因的提示,不自动夹回边界。
  3. 「字符集」五档:数字 10、小写 26、大小写 52、字母数字 62、字母数字符号 94。默认 62。
  4. 「尝试速率」四档加自定义:在线限速 10、单机 GPU 1e6、集群 GPU 1e10、bcrypt cost=12 的 3.33333333333 次/秒。选「自定义」后下面那个数字框生效。
  5. 结果区分三层:上面一行是结论,中间是明细(空间、熵、平均秒数与年数),下面一段是同样长度下换三种速率的对照。
  6. 「复制结果」复制整段明细;「复制对照表」复制正文那张速率对照表,制表符分隔。
  7. 下面的长度与字符集对照表共 20 行(长度 6、8、10、12、16 × 字符集 26、52、62、94),默认显示 12 行。点「加载更多」展开全部,点「导出 CSV」存成带字节序标记的文件。
  8. 空间超过 1e15 时按科学计数法显示并注明「量级估计」——这是双精度的精度墙,不是页面偷懒。

这个 Brute力时间计算器能解决什么问题

第一类是把「我的口令够不够长」变成能比较的数字。说「12 位很安全」没有意义,要说清是 12 位什么字符集、在什么速率下。8 位 62 字符集在单机 GPU 上平均要 3.45946125571 年,在集群上只要 0.000345946125571 年——同一个口令,速率差 4 个数量级,结论完全反过来。

第二类是给口令策略定值。要定「最短几位」,得先知道目标速率:如果对手能做到 1e10 次/秒,8 位 62 字符集撑不过一小时;把长度加到 12 位,同样速率下的时间就抬了 4 个数量级。这一页能把这条曲线算出来。

第三类是评估慢哈希的收益。bcrypt cost=12 把速率压到 3.33333333333 次/秒,同样 8 位 62 字符集平均要 1037838.37671 年,比在线限速还慢 3 倍。这个数字能直接回答「要不要上慢哈希、cost 定多少」。

第四类是把「看起来复杂」的口令打回原形。Password123! 有大写、小写、数字、符号,看起来 12 位很够,但它在字典变体里的排名非常靠前,实际熵远低于 12 位随机的理论值。这一页给出理论空间与真实熵的差距,让人明白长度之外还要看随机性。

计算原理与变量说明

整页只有三个公式,加一个常量。

变量公式说明
理论空间空间 = 字符集 ^ 长度穷举要试的组合总数
信息熵熵 = 长度 × log₂(字符集)单位是位
期望命中时间空间 / (2 × 速率)平均要试一半
年换算1 年 = 31556952 秒按 365.2425 天
每位熵log₂(字符集)26 → 4.70043971814

期望时间是空间的一半,不是全部——这是本页最常被算错的一条。平均而言要试到一半才撞上:运气最差试完整个空间,运气最好第一次就中,均匀分布下的期望是空间除以 2。8 位 62 字符集空间是 218340105584896,除以 2 再除以 31556952 秒,才是下面这几档结果:在线限速 10 次/秒下平均需要 345946.125571 年;单机 GPU 1e6 次/秒下 3.45946125571 年;集群 GPU 1e10 次/秒下 0.000345946125571 年,约合三小时。速率每提升 6 个数量级,破解时间就降 6 个数量级——长度与速率是同一场竞赛的两边,只谈一边没有意义。

慢哈希是工程上唯一能主动压速率的手段。bcrypt cost=12 单次约 0.3 秒,速率降到 3.33333333333 次/秒,同样 8 位 62 字符集平均要 1037838.37671 年——比在线限速的 345946.125571 年还慢 3 倍。加长口令加的是指数上的位数,慢哈希砍的是底数上的速率;前者要说服用户,后者只改服务端配置。argon2id 与 scrypt 同理,其中 memory-hard 的设计专门用来对抗 ASIC 与 GPU 的并行优势。

理论空间不等于人的实际熵,这是本页最重要的一条。8 位随机小写字母的理论熵是 37.6035177451 位,但真人选的口令集中在词典与常见模式上,口令本前 10 的 6 次方条覆盖的实测熵只有约 20 位:在 1e10 次/秒下平均 0.00005 秒就撞上。所以「加长度」不如「加随机性」——8 位真随机的抗穷举能力远超 12 位常用词变体。本页算的是均匀随机前提下的穷举时间,真人口令的真实强度要用词典攻击的模型去估,两者差好几个数量级。

字符集每扩一档,每位熵的增量其实很小。小写 26 是 4.70043971814 位/字符,大小写 52 是 5.70043971814,字母数字 62 是 5.95419631039,字母数字符号 94 是 6.55458885168。从 26 扩到 94 只让每位多 1.85 位,而长度多加一位就多 4.7 位——「长度优先于符号」是有量化依据的,不是经验之谈。这也是为什么把强制「必须含大写和数字」换成「至少 12 位」通常更划算。

完整示例(数值仅作演示)

默认值 8 位 × 62 字符集:空间 218340105584896,熵 47.6335704831 位,速率 1e6 次/秒时平均 109170052792.45 秒 = 3.45946125571 年。

换字符集看同一长度:8 位小写 26 是 208827064576;8 位大小写 52 是 53459728531456;8 位字母数字符号 94 是 6095689385410816。字符集从 26 到 94,空间扩大约 2.9 万倍。

换长度看同一字符集:62 字符集下 6 位是 56800235584,8 位是 218340105584896,10 位约 8.3930e+17,12 位约 3.2263e+21。每加两位,空间乘一次 62² = 3844。

精度墙那条:26 的 12 次方精确值是 95428956661682176,而双精度的 Math.pow 给 95428956661682180。两个都超过 2 的 53 次方(9007199254740992),页面这时只给 9.5429e+16 这样的量级,不装作精确。

长度与字符集对照表

第一张表是同一长度换四档字符集的空间,「复制对照表」复制的就是它。

长度字符集 26字符集 52字符集 62字符集 94
63089157761977060966456800235584689869781056
8208827064576534597285314562183401055848966095689385410816
101.4117e+141.4456e+178.3930e+175.3862e+19
129.5429e+163.9088e+203.2263e+214.7592e+23
164.3609e+222.8610e+274.7672e+284.7178e+31

第二张表是每位熵与整串熵,用来核对「长度优先」这个结论。

字符集每位熵(位)8 位总熵12 位总熵
264.7004397181437.603517745156.4052766177
525.7004397181445.603517745168.4052766177
625.9541963103947.633570483171.4503557246
946.5545888516852.436710813478.6550662201
62(16 位)5.9541963103947.633570483195.2671409662

第三张表是速率档位,同一空间换速率的结果。

速率档次/秒8 位 62 平均耗时(年)
在线限速10345946.125571
单机 GPU1e63.45946125571
集群 GPU1e100.000345946125571
bcrypt cost=123.333333333331037838.37671
1 年秒数31556952365.2425 天

读法:第一张看长度与字符集的量级,第二张看每位熵的增量有多小,第三张看速率那一档有多关键。

结果边界、舍入与适用说明

常见问题

为什么期望时间是空间的一半?

因为均匀穷举平均要试到一半才撞上。空间 218340105584896 除以 2 再除以速率,才是平均命中时间;最坏情况要试完整个空间。

为什么大数用科学计数法?

因为双精度只有 53 位有效尾数,2 的 53 次方是 9007199254740992,超过它的整数已经不精确。26 的 12 次方精确是 95428956661682176,Math.pow 给 95428956661682180,写完整数字是假的。

字符集越复杂越好吗?

增量很小。小写 26 是 4.70043971814 位/字符,94 也才 6.55458885168,扩 3.6 倍字符集只多 1.85 位;长度多加一位就有 4.7 位。所以长度优先于符号。

慢哈希真的有用吗?

有用,它砍的是速率这个底数。bcrypt cost=12 把速率压到 3.33333333333 次/秒,8 位 62 字符集平均要 1037838.37671 年,比在线限速还慢 3 倍。

为什么我的 12 位口令还是不安全?

因为理论空间不等于实际熵。真人选的口令集中在词典与常见模式上,口令本前 10 的 6 次方条覆盖的实测熵只有约 20 位,在 1e10 次/秒下平均 0.00005 秒。

一年为什么是 31556952 秒?

按 365.2425 天的平均回归年算:365.2425 × 86400 = 31556952 秒。用它会让长跨度估算不随具体闰年漂移。

集群 1e10 次/秒现实吗?

这是典型量级,用于对比不同档位的差距,不是某一台具体设备的指标。实际值取决于算法、硬件、是否加盐与是否有限流。

输入的口令会上传吗?

不会,而且本页也不需要你输入口令:只填长度、字符集与速率三个数,没有任何文本被发送,也没有写入本地存储。

相关工具