安全密码生成器(密码学随机数、无偏差)

使用密码学安全随机数(crypto.getRandomValues)在浏览器中生成无偏差的随机密码。可设置长度、字符类型、排除易混淆字符,并显示熵。

  • 在浏览器内处理(不上传)

8~128 个字符

1~100 个

使用的字符类型

每个密码都一定包含所选的每种字符至少 1 个(以不产生偏差的方式选取)。

排除的字符:0 O o 1 I l | ` ' "

生成的密码

可用字符
94 种
熵(每个密码)
130.9 比特
强度参考
非常强

熵表示即使攻击者知道这些设置(长度和字符类型),用暴力破解猜中密码所需的次数(以 2 的幂表示)。参考:低于 50 比特为弱,75 比特及以上为强,100 比特及以上为非常强。

正在生成…

密码只在本设备的浏览器中生成,不会保存、发送或记录。关闭页面后即消失,需要使用的密码请保存到密码管理器中。

使用方法

  1. 输入密码长度(8~128 个字符)和生成数量(1~100 个)。
  2. 选择要使用的字符类型(大写字母、小写字母、数字、符号),需要时可排除容易混淆的字符。
  3. 点击“复制”使用显示的密码;点击“重新生成”可生成新的一组密码。

常见问题

使用的是哪种随机数?

使用浏览器的 crypto.getRandomValues(密码学安全随机数生成器),并通过拒绝采样逐个选取字符,不会产生取模带来的偏差。完全不使用 Math.random。

一定包含所选的每种字符,为什么仍然没有偏差?

每个字符都从全部可用字符中均匀选取;如果候选密码缺少任何一种所选类型,就整个丢弃并重新生成。因此所有符合条件的密码出现概率都相同,不会像“先放入每种类型各 1 个字符再打乱顺序”那样偏向字符较少的类型。

哪些是容易混淆的字符?

共 10 个:数字 0 与字母 O、o,数字 1 与字母 I、l,竖线 |,以及不易分辨的引号(` ' ")。排除后可用字符变少,相同长度下熵会略微降低。

熵是怎么计算的?

用容斥原理精确计算符合设置的密码总数,再取以 2 为底的对数。这是假设攻击者知道长度和字符类型时的数值。

生成的密码会被保存或发送吗?

不会。密码只在本页面中生成,不会发送到服务器,也不会保存在浏览器、写入网址或记录到日志。

注意事项与限制

  • 你输入的内容只在本页面处理,不会发送到 YUCTS 的服务器。
  • 安全性也取决于使用方式:请勿在多个服务中重复使用同一个密码,并尽量开启两步验证。
  • 关闭页面后生成的密码就会消失,需要使用的密码请自行保存到密码管理器中。
  • 部分服务会限制可用符号或长度,遇到时请取消符号或调整长度。
  • 熵和强度参考是对用此方法随机生成的密码的理论值。