简体中文
如何使用密码生成器
这款密码生成器在页面打开时就会生成一个强随机密码,每次修改设置都会生成新的密码。
- 用滑块或预设选项设置长度。对大多数账号来说,16 位是可靠的默认值。
- 选择要包含的字符类型:大写字母、小写字母、数字和符号。生成的密码一定会包含你所选每种类型中的至少一个字符,因此能通过要求“至少包含一个数字和一个符号”的网站。
- 如果你可能需要手动阅读或输入密码,请勾选排除易混淆字符。
- 点击复制,直接粘贴到注册表单或密码管理器中。点击重新生成获取新密码,或点击生成 5 个从中挑选。
密码是如何生成的
每个字符都通过 crypto.getRandomValues 选取,这是浏览器内置的密码学安全随机数生成器。它和 Math.random 不同,后者用于游戏没问题,但可预测性较高,绝不应该用来生成密码。
要把随机数公平地转换成字符,需要一点技巧。常见的捷径是 random % 87,但由于 232 不是 87 的倍数,字符表中靠前的几个字符出现的概率会略高。本工具改用拒绝采样:落在顶部不完整区间的随机值会被丢弃并重新抽取,从而保证每个字符的概率完全相同。
为了确保每种选中的类型都会出现,工具先从每种类型中各抽一个字符,再从完整字符池中填充其余位置,最后用 Fisher–Yates 洗牌算法打乱顺序,让这些保证出现的字符不会出现在可预测的位置。
强度指示的含义
强度以熵的比特数衡量,表示在你的设置下生成器可能产生多少种不同的密码。
例如:从全部四种类型(87 个字符)中抽取 16 个字符,熵为 16 × log₂(87) ≈ 16 × 6.44 ≈ 103 比特。每多 1 比特,攻击者的工作量就翻一倍。
| 设置 | 字符池 | 熵 | 强度 |
|---|---|---|---|
| 8 位,仅小写字母 | 26 | ≈ 38 比特 | 非常弱 |
| 8 位,全部类型 | 87 | ≈ 52 比特 | 弱 |
| 12 位,全部类型 | 87 | ≈ 77 比特 | 一般 |
| 16 位,全部类型 | 87 | ≈ 103 比特 | 非常强 |
| 20 位,字母和数字 | 62 | ≈ 119 比特 | 非常强 |
“破解时间”假设攻击者已窃取密码数据库,能以每秒一百亿次的速度离线尝试,平均搜索一半的可能性后找到密码。实际攻击效果与网站存储密码的方式密切相关,因此请把它当作比较参考,而不是保证。这个计算只适用于随机生成的密码;你自己想出来的密码,强度通常远低于其长度所显示的水平。
使用强密码的建议
- 一个账号一个密码。重复使用密码是一次数据泄露蔓延到你其他账号的主要原因。
- 使用密码管理器,这样你就无需记住这些字符串。大多数浏览器和手机都自带密码管理器。
- 开启双重验证,保护邮箱、银行和社交账号。即使密码泄露,它也能保护你。
- 长度比复杂度更重要,尤其是需要经常手动输入的密码。如果网站不接受某些符号,可以取消勾选符号,再增加几位长度。
本页面不会存储、记录或发送它生成的密码。关闭或刷新页面后,密码就会消失。
常见问题
这个密码生成器安全吗?
安全。密码在浏览器中通过系统的安全随机数生成器 crypto.getRandomValues 生成,不会发送或保存到任何地方。
密码应该多长?
普通账户至少12位,邮箱、网银或密码管理器建议16位以上。长度比符号更能提高安全性。
熵值(bit)是什么意思?
它衡量攻击者需要尝试多少次才能猜中。每增加1 bit,组合数量翻倍;80 bit以上通常被认为非常强。
为什么要排除相似字符?
I、l、1、O、0 等字符在阅读或手写时容易混淆。排除它们可以减少输入错误,只会略微降低熵值。
所有网站都用同一个强密码可以吗?
不可以。每个账户都应使用不同的密码,这样一个账户泄露不会连累其他账户。密码管理器可以帮你记住它们。