安全实用 本地计算 开箱即用 内置示例 不留痕迹

密码强度检测

输入待检测的密码,实时算出强度档位(很弱~很强)、长度、不重复字符数、字符集大小、信息熵(bit)与离线估算的破解时间,并按「长度不足 / 全同字符 / 连续序列 / 重复过多」给出风险提示与改进建议。只做「字符集 × 长度」的熵估算,不联网、不查弱密码字典、不写入浏览器存储。

想知道正在用的密码扛不扛得住暴力破解,把它粘进来:工具按字符集大小乘长度的口径算信息熵,给出很弱到很强的档位,并按 GPU 量级(每秒一百亿次猜测)折算离线破解时间。全同字符、连续序列(abcde、12345)、重复过多这三类弱模式会被单独打折并提示。

读结果时留意两个口径:一是很强只针对暴力穷举,不查泄露库——如果这个密码已在别处泄露或被你复用,档位再高也等于零;二是破解时间按离线攻击估算,网站若用慢哈希存储会更慢,用明文或快哈希则会更快。结论始终是:加长、不复用、开两步验证。

使用步骤

  1. 把待检测的密码粘进输入框,档位与熵值实时更新。
  2. 看字符集构成:四类字符用齐了吗,长度到 12 位以上了吗。
  3. 读风险提示:全同、连续、重复过多会具体指出问题所在。
  4. 按改进建议调整后再测一遍,直到档位与熵值达标。

计算原理与示例

强度是怎么算的

先算出密码实际用到的字符集大小 C 与长度 L,熵 = L × log2(C)(单位 bit);再对三种可判定的弱模式打折:所有字符完全相同 → 熵退化成一个字符的量;是连续字符序列(abcde、12345)→ 只按起点与长度计;不重复字符数不足一半 → 熵乘 0.6。档位按熵划分:低于 28 bit 很弱、低于 36 弱、低于 60 中等、低于 80 强、80 以上很强。

四类字符与字符集

字符集大小按实际用到的类别累加:小写字母 26、大写字母 26、数字 10、ASCII 可见符号 33,出现中文等非 ASCII 字符时另加 100(保守估计);只有空白与控制字符时按 10 计。所以「8 位纯数字」的搜索空间远小于「8 位大小写加数字」,这是判断「加长」与「加类」哪个更有效的依据。

风险提示怎么看

风险提示指出具体问题(太短、全同、连续、重复过多),改进建议给出下一步动作(加长到 12 位以上、补小写 / 大写 / 数字 / 符号)。两者都只是建议,不影响已算出的数值。

破解时间的估算口径

破解时间按离线暴力破解估算:每秒 1e10 次猜测(GPU 量级),取平均尝试一半空间,再按年 / 天 / 小时 / 分钟 / 秒换算成可读时长。若该密码已出现在公开泄露库中,真实破解会远快于这个数字,因此「很强」不代表可以跨站复用。

估算口径:熵 = 字符集大小 ^ 长度,再对全同字符、连续序列、重复过多三种弱模式打折;破解时间按离线每秒 1e10 次猜测(GPU 量级)取平均一半空间估算。不含弱密码字典比对。

代码示例

JavaScript 熵的粗算

// 熵 = 长度 × log2(字符集大小),与工具同口径
const pool = (/[a-z]/.test(pw) ? 26 : 0) + (/[A-Z]/.test(pw) ? 26 : 0) +
             (/[0-9]/.test(pw) ? 10 : 0) + (/[^a-zA-Z0-9]/.test(pw) ? 33 : 0);
const entropy = pw.length * Math.log2(pool);
console.log(entropy.toFixed(1), "bit");  // 60 以上算强,80 以上很强

Python 用 zxcvbn 做更贴近真实的评估

# pip install zxcvbn:带字典与模式匹配,比纯熵估算更准
from zxcvbn import zxcvbn

r = zxcvbn("mypassword2019")
print(r["score"])  # 0~4,4 最强
print(r["crack_times_display"]["offline_slow_hashing_1e4_per_second"])

常见问题

我输入的密码会被上传或保存吗?

不会。全部计算在浏览器里完成,密码不上传、不写入 localStorage、也不写访问日志;本工具刻意没有「计算历史」区块,刷新或关掉页面即消失。

为什么不查弱密码字典?

字典库需要持续维护且体积不小,与「纯本地、可断网使用」冲突。本工具只用熵估算加三类可判定的弱模式;如果密码是常见词或已泄露口令,真实强度会低于这里显示的档位。

为什么长度一样但强度差很多?

因为熵由「字符集大小 × 长度」共同决定:8 位纯数字的字符集只有 10,约 27 bit;8 位大小写字母加数字的字符集是 62,约 47 bit,搜索空间相差百万倍量级。

中文密码更安全吗?

在估算里单个非 ASCII 字符按 100 的字符集量级计入(保守),因此同样长度下中文口令的熵通常更高;但不少系统对中文支持不一致,且容易被输入法联想出来,不建议只依赖中文。

显示「很强」就万无一失吗?

不是。估算只考虑暴力破解的搜索空间,不考虑该密码是否已出现在泄露库、是否被你复用到多个站点、是否被键盘记录或钓鱼窃取。真正有效的是足够长、不复用、再配合两步验证。

连续序列和重复字符为什么扣分这么多?

攻击者会优先尝试字典与键盘模式,abcde、123456789、aaaaaaaa 这类口令的搜索空间远小于同长度的随机串,所以估算里直接按「起点 + 长度」或「单字符」计。

破解时间显示「瞬间」是什么意思?

表示按离线每秒 1e10 次的量级,穷举全部可能不到 1 秒。这类密码无论在哪个网站都应立即更换。

我要设多长的密码才够?

一般场景建议 12 位以上、至少用到三类字符;重要账号(邮箱、银行、主密码)建议 16 位以上,或直接用随机密码生成器产出的随机串,并且每个站点都不重复。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。