密码强度检测器:如何评估并改进口令
为什么需要关注密码强度
密码仍是多数账户的第一道关。生日、手机号、常见词作口令仍然很普遍。Verizon 等数据泄露报告里,弱口令或被盗凭证长期占入侵路径的大头。
密码强度检测器 在浏览器本地评估口令:长度与字符集、常见弱模式、有效熵与离线破解时间量级,并给出可执行的改进建议。理解评分维度,比盯着一个「分数颜色」更有用。
弱密码的风险
- 暴力破解:短或纯数字口令,离线哈希可被很快穷尽
- 字典攻击:常见词、键盘行走、leet 变体都在攻击字典里
- 撞库:一站泄露,复用同一口令的其他站一并失守
- 可猜测个人信息:生日、姓名拼音、手机号尾号
核心评估维度(与本站工具对齐)
1. 长度
长度对搜索空间是指数项。每多一位,在相同字符集下空间乘以字符集大小。
| 密码长度 | 纯数字 | 小写字母 | 大小写+数字 | 大小写+数字+符号 |
|---|---|---|---|---|
| 6 位 | 瞬间 | 几秒 | 几分钟 | 几小时 |
| 8 位 | 几秒 | 几小时 | 几天 | 几周 |
| 12 位 | 几年 | 数千年 | 数百万年 | 极长 |
| 16 位 | — | — | 天文量级 | 天文量级 |
结论:长度通常比「多塞几个特殊符号」更划算。可用 密码生成器 生成长随机串或 passphrase,再用强度检测复核。
2. 字符集多样性
四类字符:大写、小写、数字、符号。多开一类会增大字符集,从而提高原始熵。不必为记不住而生僻符号——随机长口令或单词短语更稳。
3. 弱模式检测(工具会扣分)
即使「看起来很长」,下列模式仍会显著压缩有效搜索空间:
| 模式 | 例子 | 工具行为 |
|---|---|---|
| 常见密码表 | password、qwerty | 有效熵压到很低,分数封顶偏弱 |
| Leet 变体 | P@ssw0rd、Adm1n | 归一化后命中常见词根则惩罚 |
| 连续字符 | abcdef、987 | 序列惩罚 |
| 重复字符 | aaa、1111 | 重复惩罚 |
| 键盘行走 | qwerty、asdfgh、1qaz2wsx | 行走惩罚 |
| 年份后缀 | MySecret2024 | 后缀年份惩罚 |
字典与规则攻击不按「全字符集暴力」计价;工具用有效熵(原始熵减去模式惩罚,并设上限)来反映这一点。
4. 熵与破解时间边界
原始熵近似:长度 × log₂(字符集大小)。本站再做三件事:
- 模式惩罚:命中上表则扣 bit,常见词直接压到极低有效熵
- 封顶:有效熵封顶 128 bit——再高的数字对「离线穷举」已无额外叙事价值
- 对数空间估时:用有效熵估算平均破解时间(半空间 / 每秒 100 亿次),避免
charset^length溢出成Infinity/NaN
参考区间(有效熵):
- < 28 bit:很快可被离线猜完量级
- 28–35 bit:中等
- 36–59 bit:较强
- ≥ 60 bit:暴力穷举通常不现实(仍要防复用与钓鱼)
使用场景
注册重要账户前
在银行、邮箱、云控制台设口令时,粘贴到本地检测器看清单与建议。站点自带强度条标准不一;独立、纯前端工具便于交叉核对。
审计旧口令
多年前的「单词 + 年份」今天仍常见。把候选放进 强度检测,若出现 leet / 年份 / 键盘行走,优先用生成器换掉。
团队策略
策略可写清:最低长度(如 ≥12)、是否禁止常见表与年份后缀、鼓励 passphrase、落库用 bcrypt(或 Argon2id)而不是可逆加密。强度检测管「人选得怎样」,bcrypt 管「存得怎样」。
实用建议
1. 优先加长,再谈符号花样
# 弱:短且可预测
P@ssw0rd!2024
# 更稳:长且无关单词(或随机串)
correct-horse-battery-staple
生成可用 密码生成器(随机 / passphrase),再用强度检测看有效熵是否掉到惩罚区。
2. 一站一口令
复用是撞库的燃料。密码管理器负责记忆与填充;你只守住主口令 + 2FA。
3. 少用个人信息与年份后缀
生日、手机号、Name2024 都在规则字典里。工具对年份后缀会单独提示。
4. 叠加第二因子
口令再强也挡不住钓鱼页。重要账户开 TOTP 或硬件密钥;见站内 TOTP 工具。
5. 落库用慢哈希
客户端强度检测不能代替服务端 bcrypt/Argon2。生成 → 检测 → bcrypt 哈希 是一条完整本地演练链。
站内密码簇怎么串
| 步骤 | 工具 / 指南 |
|---|---|
| 生成随机口令 / passphrase | 密码生成器 · 生成器指南 |
| 估有效熵 / 拒弱模式 | 强度检测 · 本文 |
| 落库 / 校验 | Bcrypt 工具 · Bcrypt 指南 |
实现注记
评分与模式检测集中在共享函数 checkPasswordStrength:长度/字符类加分,常见表、leet、序列、重复、键盘行走、年份后缀扣分并压有效熵;有效熵封顶 128 bit;破解时间用 2^(entropy-1) / 1e10 的对数形式计算,避免 Math.pow(charset, length) 溢出。UI 清单与建议文案映射同一结果,不在组件里另写一套规则。常见表是内置百级样本,不是完整 Have I Been Pwned 语料——未命中≠未泄露。估算按离线 GPU 级猜测率,在线限速登录会慢得多;分数是启发式,不是密码学证明。
FAQ
为什么 P@ssw0rd 分数很低?
Leet 替换(@→a、0→o 等)归一化后仍是常见词根,攻击字典同样收录。换无关长串或 passphrase,不要只改符号。
有效熵和「原始熵」差在哪?
原始熵按字符集假设均匀随机;一旦出现键盘行走或常见词,真实猜测空间远小于 charset^length。工具显示的是扣惩罚、并可能封顶后的有效熵。
强度检测能代替密码管理器或 bcrypt 吗?
不能。检测只回答「这个字符串好不好猜」;管理器解决复用与记忆;bcrypt/Argon2 解决存储侧暴力成本。三条链要分开看。
为什么很长的随机口令熵显示封顶?
超过约 128 bit 后,离线穷举已不是主要威胁模型,继续显示 200+ bit 容易误导。封顶后应关注:是否唯一、是否进管理器、服务端是否慢哈希。
来自 ToolVault 工具匣 的开发手记。更多免费本地工具见 首页。
相关工具
相关文章
VIN 码校验位详解:第 9 位怎么算,车架号真假一测便知
VIN 车架号 17 位的结构与校验算法详解:WMI/VDS/VIS 拆解、第 9 位校验位的转写表与权重表手算示例、第 10 位年份码 30 年循环、常见校验失败原因,附在线 VIN 校验工具。
测试数据合规使用边界:为什么测试环境用真实用户数据本身就是违法
开发测试环境引用真实用户数据违反《个人信息保护法》:PIPL 明确目的限制原则,测试属于全新处理目的。合法替代数据四来源(脱敏/合成/公开测试段/自造)、「格式合法但随机」的技术原理(国标校验位),以及红线清单。附身份证/手机号/信用代码的校验位算法表。
个保法 PIA 影响评估自查:五类触发场景、评估三要素与实操框架
《个人信息保护法》第 55-56 条的个人信息保护影响评估(PIA):哪五类处理活动必须事前评估、评估报告的三要素结构、报告留存三年的要求,以及数据地图→风险矩阵→措施核对的自查框架。附与等保/密评的三位一体关系。