密码生成器

在浏览器中运行,不上传任何内容

由浏览器的安全随机数生成器生成的随机密码、API Key 和令牌,并显示它们真实的熵。

Settings

Characters

Generated

Very strong129.7 bits of entropy each, from 90 possible characters

Generating…

20 characters from 90 · 129.7 bits
1 value

怎样的密码或密钥才算强?

随机密码的强度用熵的位数来衡量:即在相同设置下可能生成的密码数量以 2 为底的对数。从这里提供的 90 个字母、数字和符号中取 20 个字符,大约有 130 位;6 位数字的 PIN 大约只有 20 位。每多一位,猜测者的工作量就翻一倍。

长度比什么都重要。每多一个字符,可能性就乘以字母表的大小,而增加一类字符只会让字母表稍微变大一点。这就是为什么长的随机字符串胜过短而巧妙的密码,也是为什么应该用密码管理器来保存它们。

API Key、客户端密钥、Webhook 签名密钥和令牌也是如此。没有人会手动输入它们,所以它们应该足够长且完全随机;128 位是常见的下限。随机性必须来自密码学安全的来源:本工具使用浏览器的 crypto.getRandomValues(),绝不使用 Math.random()。

使用方法

  1. 1设置长度并选择字符:A–Z、a–z、0–9、符号,以及你输入的任何额外字符。修改设置时会立即生成新值。
  2. 2对于需要人去阅读或输入的密码,打开 Leave out look-alikes 去掉 Il1|O0o。对于要求每类字符至少出现一次的系统,请启用对应选项。
  3. 3也可以选择预设:密码、易读密码、API Key、十六进制令牌或 PIN。
  4. 4查看强度一栏,它显示当前设置下的精确熵,然后复制生成的值。Generate(Ctrl+Enter)会生成新的值。
  5. 5要一次生成多个,设置 How many(最多 1,000 个),然后使用 Copy all 或 Download(Ctrl+S)。

问题排查

某个系统不接受部分符号
关闭 Symbols,只在 Extra characters 中输入它接受的符号,然后把长度增加几个字符,以弥补变小的字母表。引号和反斜杠默认不包含,因为它们会破坏 shell 和配置文件中的字符串。
打开 "every selected set" 后熵变低了
要求每类字符都出现,会排除缺少某一类的密码,所以可能的密码略少。16 个字符及以上时差距不到 1 位;值很短时差距更大,而显示的数字是精确的。
无法按当前设置生成
至少选择一类字符或输入一些字符;如果要求每类都出现,长度至少要等于所选的类别数。

常见问题

密码会被发送或保存到任何地方吗?

不会。它们在页面加载后由你的浏览器生成,从不发送也不保存。只有你的设置(例如长度)会保存在当前浏览器中。请把需要的值保存在密码管理器或密钥存储中。

每个字符出现的概率都相同吗?

是的。每个字符都通过拒绝采样选出,避免了常见的 random % length 方法带来的微小偏差;对于必须包含每类字符的密码,会重新抽取直到满足要求,而不是事后修补,因此每个有效密码的概率都相同。

密码应该多长?

存放在密码管理器中的密码,建议 16 个字符以上并包含所有字符类别。API Key 和令牌至少要有 128 位,例如 22 个字母和数字,或 32 个十六进制数字。