安全实用 本地计算 开箱即用 内置示例 不留痕迹

密码生成器

生成 4~128 位随机强密码,可选大写、小写、数字、符号四类字符。使用浏览器原生 crypto.getRandomValues 加密随机数,保证每个选中的字符类至少出现一次,附熵值强度评估。密码仅在本地生成,不发送、不存储、不写入历史。

注册新账号、初始化服务器密码、给数据库建用户时,与其自己想一个看起来复杂的密码,不如让加密随机数替你决定。本工具用浏览器原生的 crypto.getRandomValues(操作系统熵源,不是 Math.random 伪随机),保证每个选中的字符类至少出现一次,再用 Fisher-Yates 洗牌消除位置规律。

选参数时记住一条:长度比复杂度更有效。12 位随机小写的熵(约 56 bit)已经胜过 8 位四类字符的复杂密码,因为暴力破解成本随长度指数增长。生成后请直接存进密码管理器——能背下来的密码,往往意味着熵不够高。

 

使用步骤

  1. 选长度:普通账号 12~16 位,核心账号(邮箱、支付)16 位以上。
  2. 勾选字符类:建议四类全选,站点限制符号时至少保留大小写与数字。
  3. 点生成,看熵值评估:60 bit 以上算强,90 bit 以上极难穷举。
  4. 复制进密码管理器保存,本页不保留任何记录,刷新即消失。

计算原理与示例

随机数来源

随机来源:使用浏览器原生的 crypto.getRandomValues 加密级随机数(而不是 Math.random 伪随机),每个字符等概率抽取。

密码生成算法

生成算法:先从每个选中的字符类各取 1 个字符保证覆盖,再从全字符池补足到目标长度,最后用 Fisher-Yates 算法洗牌消除位置规律。

密码强度(熵值)评估

强度评估:熵值 = 长度 × log2(字符池大小)。16 位四类字符(74 个可选字符)熵约 99.4 位,暴力穷举在现有算力下不可行。

代码示例

JavaScript 浏览器里生成随机密码

// 拒绝采样取均匀随机整数(直接取模会有偏差)
function randInt(max) {
  const limit = Math.floor(0x100000000 / max) * max;
  const buf = new Uint32Array(1);
  do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
  return buf[0] % max;
}

const pool = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
const gen = (n) => Array.from({ length: n }, () => pool[randInt(pool.length)]).join("");
gen(16);

Shell 命令行生成

# openssl:从 base64 字符里取 16 位(先去掉符号)
openssl rand -base64 24 | tr -d "/=" | cut -c1-16

# pwgen(需安装):-s 安全模式,-y 含符号
pwgen -s 16 1
pwgen -sy 16 1

常见问题

多长的密码才安全?

以熵值衡量:60 位以上算强,90 位以上极难暴力破解。建议:普通账户 12~16 位四类字符(熵约 74~99 位);核心账户(邮箱、支付)16 位以上并开启两步验证。长度比复杂度更有效——12 位随机小写(约 56 位熵)胜过 8 位复杂密码。

为什么不用 Math.random?

Math.random 是伪随机数,输出序列可被预测还原,不适合安全场景。crypto.getRandomValues 是操作系统熵源的加密级随机数,不可预测。本工具已使用后者。

生成的密码会被记录吗?

不会。密码在内存中生成并显示,本工具不接入计算历史功能(其他计算工具有本地历史,密码工具刻意没有),不写入 localStorage,不发送任何网络请求。刷新页面后即消失。

密码应该包含哪些字符?

建议大写字母、小写字母、数字、符号四类都用上,并确保每类至少出现一次。长度比复杂度更重要:16 位随机字符的强度远高于 8 位复杂密码,因为暴力破解成本随长度呈指数增长。

不同的网站能用同一个密码吗?

不要。一个站点数据泄漏会导致你在其他站点的账号被「撞库」登录。应做到一站一密,并用密码管理器集中保存主密码和各站随机密码。密保问题的答案同样不要多站重复。

熵值是什么意思?

熵是密码不确定性的度量,单位是比特。可用字符集越大、长度越长,熵就越高。约 80 比特足以抵御离线暴力破解,100 比特以上非常安全。本工具会显示生成密码的熵值供你参考。

生成的密码需要定期更换吗?

不必机械地定期更换。现代建议是:密码未泄漏就不必主动改,一旦发现服务商数据泄漏再立即更换,并开启两步验证(2FA)。强制频繁改密码反而容易促使人选弱密码或写出规律。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。