密码生成器

在浏览器中生成高强度随机密码。可设置长度和字符类型,排除容易看错的字符,一次最多生成 100 个密码,并显示强度评级和以位为单位的熵。

长度

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 用滑块或数字输入框设置长度。存放在密码管理器中的密码,建议使用 16 位或更长。
  2. 选择字符类型:大写字母、小写字母、数字和符号。“每种所选类型至少一个”默认开启,可确保每个密码都包含所选的每种字符。
  3. 根据需要排除 l、1、O 等相似字符、易混淆的符号,或网站不接受的特定字符。
  4. 点击“生成”,查看强度和熵,然后复制单个密码或全部复制。

怎样的密码才算强

对于随机生成的密码,强度用熵来衡量:长度 × log2(字符池大小) 位,字符池就是可供选取的字符集合。熵每多 1 位,攻击者需要尝试的次数就翻一倍。长度直接与熵相乘,而扩大字符池只能让每个字符多提供一点熵,所以长度更重要:16 位纯小写密码的可能组合数,大约是混合四种字符的 8 位密码的 1100 万倍。

长度字符类型字符池熵
4数字(PIN 码)1013.3 位
8小写字母2637.6 位
8四种全选8951.8 位
12字母和数字6271.5 位
16小写字母2675.2 位
16四种全选89103.6 位
20四种全选89129.5 位

在本工具中,四种字符全选时字符池共 89 个:26 + 26 + 10 + 27 个符号。工具显示的熵会向下取整为整数位。这些数字只适用于随机密码,人为想出来的密码,实际熵远低于其长度所暗示的水平。

NIST SP 800-63B 的建议

NIST SP 800-63B 是美国联邦政府的数字身份认证指南,其规则针对的是负责校验密码的服务方。当前版本 SP 800-63B-4 规定:

  • 密码作为唯一认证因素时必须要求至少 15 个字符,与其他因素组合使用时至少 8 个字符,并且应允许至少 64 个字符;
  • 不得强制“必须包含大写字母、数字和符号”之类的组成规则,也不得要求定期更换密码,但在有证据表明密码泄露时必须要求更换;
  • 必须将新密码与常用、可预测或已泄露密码的黑名单进行比对;
  • 应接受所有可打印 ASCII 字符和空格,并允许粘贴,以便使用密码管理器。

对普通用户来说道理相同:重要的是长度和随机性,P@ssw0rd1 这类可预测的替换技巧并没有帮助。

密码管理器与口令短语

重复使用的密码往往比短密码更危险:某个网站发生数据泄露后,攻击者会拿泄露的邮箱和密码组合去尝试登录其他网站,这就是“撞库”。请为每个账户使用不同的随机密码,并交给密码管理器记忆,这样 20 位密码和 8 位密码用起来一样省事。

少数必须凭记忆输入的密码,例如密码管理器的主密码,更适合使用口令短语,即随机挑选的几个单词,比如掷骰子从 EFF 长词表中选词。该词表共 7776 个词,每个词约提供 12.9 位熵,六个词约 77.5 位。本工具生成的是字符密码,而不是口令短语;如需 API 密钥等供程序使用的机密,请使用随机 Base64 生成器。

本生成器的工作原理

密码由你设备上的 JavaScript 调用 crypto.getRandomValues() 生成,这是浏览器内置的加密安全随机数生成器,密码不会被发送或保存。直接取模会让部分字符出现的概率略高,因此工具采用拒绝采样:32 位随机数如果不小于字符池大小在该范围内的最大整数倍,就丢弃并重新抽取,从而保证每个字符出现的概率完全相同。

排除相似字符会去掉 i l 1 L o 0 O,适合需要朗读或照着纸条输入的密码,例如 Wi-Fi 密码。排除易混淆符号会去掉各种括号、斜杠、波浪号以及 , ; : .,它们在某些表单、命令行和配置文件中容易出问题,剩下的符号是 ! @ # $ % ^ & * - _ = + ?。两者都会让字符池变小,可以多加一两位长度来弥补。

常见问题

密码应该设多长?

仅靠密码保护的账户至少 15 位,这也是 NIST SP 800-63B-4 对单因素密码规定的最低长度。如果使用密码管理器,16 到 24 位随机字符不会增加任何负担。对于经常需要手动输入的密码,可以考虑由五六个随机单词组成的口令短语。

使用网站生成的密码安全吗?
可以安全使用,前提是密码在你的设备上生成,并且从不离开设备。本生成器完全在浏览器中运行,使用 crypto.getRandomValues(),密码不会被传输、记录或保存。建议把需要的密码直接复制到密码管理器中。
以位为单位的熵是什么意思?

它是当前设置下可能生成的密码总数以 2 为底的对数。80 位意味着理论上有 2 的 80 次方种可能,每多 1 位,猜测的工作量就翻一倍。熵描述的是密码的生成方式,因此只适用于随机密码。

需要定期更换密码吗?

不需要按固定周期更换。NIST SP 800-63B-4 要求服务方不得强制定期更换密码,因为用户往往会采用可预测的变化规律。当服务方通知数据泄露、密码出现在泄露数据中,或你怀疑他人已知道密码时,再进行更换。

要求包含每种字符类型会让密码更强吗?

不会。该选项默认开启,作用只是确保密码能通过网站的组成规则。工具会丢弃缺少某种所选字符的密码并重新生成,这会排除一部分组合,反而让实际熵略微降低,密码越短越明显,所以显示的数值是一个上限。想提高强度,增加长度才是更好的办法。