随机密码生成器 — 在线生成强密码
基于浏览器加密随机数的随机密码生成器
在浏览器中处理 · 不上传任何内容
功能简介
选好长度和想要的字符类型,工具就会生成难以猜测的随机密码。一次最多可以生成 100 个,每个都能一键复制。所有计算都在浏览器中完成,不会上传任何内容。
使用方法
- 用滑块(最多 128)或数字框设置长度,范围为 4 到 1024。下方的 16、32、64、128、256、512、1024 按钮可以直接跳到对应长度。
- 勾选需要的字符类型:小写字母、大写字母、数字、符号。
- 如果需要手动抄写密码,打开排除易混淆字符。
- 每次更改选项,结果都会刷新。点击“重新生成”可以用相同选项再生成一组。
- 点击密码旁的复制按钮,粘贴到密码管理器或注册表单中。
生成原理
- 随机源:只使用
crypto.getRandomValues,从不使用Math.random。 - 没有取模偏差:用
random % poolSize选字符会让某些字符的出现概率略高。本工具的做法是,落在不均匀尾部(2^32 除以字符池大小的余数部分)的 32 位随机值会被丢弃并重新抽取。这就是拒绝采样,能保证每个字符出现的概率完全相同。 - 每种类型都会出现:先从每种选中的类型中各抽一个字符,其余字符从完整的字符池中抽取,最后用 Fisher-Yates 算法打乱整个序列。
- 熵:按 长度 × log2(字符池大小) 显示。这是近似值,因为保证每种类型都出现会让实际值略低一点。
- 强度等级:低于 40 位为弱,低于 60 位为一般,低于 80 位为良好,80 位及以上为非常强。
- 字符池:26 个小写字母、26 个大写字母、10 个数字和 25 个符号(
!@#$%^&*()-_=+[]{};:,.?/~)。
示例
| 设置 | 字符池大小 | 熵 | 强度 |
|---|---|---|---|
| 8 位纯数字 | 10 | 约 26.6 位 | 弱 |
| 12 位字母和数字 | 62 | 约 71.4 位 | 良好 |
| 16 位,全部类型 | 87 | 约 103.1 位 | 非常强 |
| 24 位,全部类型 | 87 | 约 154.6 位 | 非常强 |
比起单个密码有多长,每个网站使用不同的密码更重要,所以请把生成的密码保存在密码管理器中。
常见问题
生成的密码会被发送或保存吗?
不会。密码在你的浏览器标签页内生成,从不离开页面。关闭页面后就会消失,所以请立即保存到密码管理器中。
为什么不直接用 Math.random?
Math.random 并不是为不可预测性而设计的。本工具调用 crypto.getRandomValues,它使用操作系统提供的密码学安全随机源。
熵的位数是什么意思?
熵表示攻击者需要在多少个等可能的密码中猜测,用 2 的幂来表示。每多 1 位,搜索空间就翻一倍。本工具把 80 位及以上标为非常强。
什么时候该排除易混淆字符?
需要手动输入或口头念出密码时。它会去掉 I、l、1,以及数字 0 和字母 O、o。代价是字符池略小,熵也会略低。