强密码生成器

按需要的长度和字符类型生成真正随机的强密码。密码在你的设备上生成,不会发送到任何地方。

密码设置

16
包含
通过 crypto.getRandomValues 在你的设备上生成。不会发送或保存任何内容。

你的密码

—
强 —
字符集
—
破解所需时间(离线,10¹⁰次/秒)
—
更多密码

    如何使用密码生成器

    这款密码生成器在页面打开时就会生成一个强随机密码,每次修改设置都会生成新的密码。

    1. 用滑块或预设选项设置长度。对大多数账号来说,16 位是可靠的默认值。
    2. 选择要包含的字符类型:大写字母、小写字母、数字和符号。生成的密码一定会包含你所选每种类型中的至少一个字符,因此能通过要求“至少包含一个数字和一个符号”的网站。
    3. 如果你可能需要手动阅读或输入密码,请勾选排除易混淆字符。
    4. 点击复制,直接粘贴到注册表单或密码管理器中。点击重新生成获取新密码,或点击生成 5 个从中挑选。

    密码是如何生成的

    每个字符都通过 crypto.getRandomValues 选取,这是浏览器内置的密码学安全随机数生成器。它和 Math.random 不同,后者用于游戏没问题,但可预测性较高,绝不应该用来生成密码。

    要把随机数公平地转换成字符,需要一点技巧。常见的捷径是 random % 87,但由于 232 不是 87 的倍数,字符表中靠前的几个字符出现的概率会略高。本工具改用拒绝采样:落在顶部不完整区间的随机值会被丢弃并重新抽取,从而保证每个字符的概率完全相同。

    为了确保每种选中的类型都会出现,工具先从每种类型中各抽一个字符,再从完整字符池中填充其余位置,最后用 Fisher–Yates 洗牌算法打乱顺序,让这些保证出现的字符不会出现在可预测的位置。

    强度指示的含义

    强度以熵的比特数衡量,表示在你的设置下生成器可能产生多少种不同的密码。

    熵(比特)= 长度 × log₂(字符池大小)

    例如:从全部四种类型(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 等字符在阅读或手写时容易混淆。排除它们可以减少输入错误,只会略微降低熵值。

    所有网站都用同一个强密码可以吗?

    不可以。每个账户都应使用不同的密码,这样一个账户泄露不会连累其他账户。密码管理器可以帮你记住它们。