密码生成器
用密码学安全随机数生成高强度密码或易记口令 —— 可调长度、字符集、排除易混字符, 并实时显示强度与破解时间估算。
为什么长度最关键
随机密码的安全性归结为一件事: 熵 —— 攻击者需要尝试的可能性总数。熵随字符池变大而增加, 并且每多一个字符就成倍增长:
- 熵(比特) = 长度 × log₂(字符池大小)。
- 只用小写字母(26 种)、8 位长度 ≈ 38 比特; 加上数字与大小写混合(62 种)、16 位长度 ≈ 95 比特。
- 每多 1 比特, 攻击者的工作量就翻倍; 所以从 40 比特到 80 比特不是难两倍, 而是难约一万亿倍。
这就是为什么一个长长的、看起来很朴素的密码, 通常比塞满符号的短密码强得多。
什么样的密码最弱
- 长度太短。 现实中的破解多发生在网站哈希库泄露之后的离线场景 —— 攻击者用现代显卡每秒可以尝试数十亿次。
- 有规律。 姓名、生日、键盘连续键(qwerty)、球队名, 以及 `Password1!` 这类经典替换套路, 都排在各种破解字典的最前面。
- 重复使用。 一个旧论坛泄露的密码, 会解锁你所有复用它的账号, 「撞库」就是自动化地做这件事。
- 个人信息。 社交资料上能看到的东西 —— 宠物名、生日、纪念日 —— 都是定向猜测的素材。
密码 vs 口令(密码短语)
口令把随机单词串起来, 例如 `harbor-cactus-lantern-truck-91`。它比大多数密码更长, 却远比随机字符更容易记住、也更好在手机上输入。本工具的词表有 2048 个词, 因此每个单词约 11 比特: 4 个词约 44 比特, 6 个词约 66 比特 —— 对于有登录频率限制且开启了两步验证的账号已足够。但涉及资金或邮箱的账号, 还是建议用 16 位全随机密码并存进密码管理器。
这个生成器怎么做的
- 随机数来自 crypto.getRandomValues(), 即浏览器的密码学安全随机源, 而不是可预测的 `Math.random()`。
- 勾选每类至少一个时, 生成器会保证你选择的每一类字符都至少出现一次, 其余位置保持均匀随机。
- 排除易混字符会去掉 `0 O 1 l I`, 这些正是手抄出错的主要来源。
- 全部在本地完成, 不发送到服务器、不存储、不记录, 也没有历史记录 —— 刷新页面后生成的密码就消失了。
实用习惯
- 每个账号用不同密码, 让密码管理器替你记。
- 只要支持就开启两步验证, 即使密码泄露也能挡住。
- 邮箱、银行以及任何能重置其他账号的账号, 建议 16 位以上。
- 不要通过聊天或邮件发送密码; 需要共享就用密码管理器的共享功能。
- 密码该改的时机是服务方通报泄露, 而不是固定的日历周期。
破解时间估算说明
强度条把熵换算成猜测次数, 并按每秒一万亿次给出耗时 —— 大致相当于现代硬件的一次严肃离线攻击。请把它理解为对数量级的直观展示, 而不是保证: 现实中的风险通常来自弱密码和重复使用, 而不是这串字符本身的数学量。
FAQ
在网页上生成密码安全吗?
本页的密码由你浏览器内的 JavaScript 调用 crypto.getRandomValues() 生成, 不会传输、存储或记录任何内容。不过本地密码管理器能一步完成生成与保存, 日常使用更方便。若想验证本页, 可以打开浏览器开发者工具的 Network 面板再点一次生成 —— 不会看到任何携带密码的请求。
密码该设多长?
开启了两步验证的账号, 12~16 位随机字符就很够用。邮箱、银行或能重置其他账号的账号, 建议 16 位以上。再往上加长度当然更安全, 但相比「不重复使用密码」这条, 实际收益要小得多。
口令比随机密码弱吗?
按每个字符算确实更弱 —— 单词来自词典, 单字符熵更低。但口令足够长, 总熵可以接近随机密码, 同时好记、在手机上也好输入。需要手打的登录用口令; 存进密码管理器的一律用全随机字符串。
密码需要定期更换吗?
现在的建议已不再主张强制定期更换 —— 那样往往只会产生可预测的变体。有理由时再改: 服务方通报泄露、设备曾共用、或你不再信任某服务。与其做轮换计划, 不如先把「每个账号独立密码」和两步验证做到位。