密码生成器

在线生成强密码:自定义长度(4-128)与字符集(小写 / 大写 / 数字 / 符号), 可排除易混字符(0O1lI)便于人工抄写。基于浏览器原生 crypto.getRandomValues(CSPRNG) 与拒绝采样算法,消除模偏差,所有随机数在本地生成。

长度16
字符集
强度很强熵 ≈ 102.8 bits · 字符集 86
生成结果(0 条)
  • 点击"重新生成"开始创建密码
使用原生 crypto.getRandomValues(CSPRNG)+ 拒绝采样消除模偏差, 所有随机数在浏览器本地生成,不会上传。

常见问题

什么才算"强密码"?长度和字符集哪个更重要?

密码强度由熵(entropy)决定,公式为 熵 = 长度 × log₂(字符集大小)。字符集越大、长度越长,熵越高,破解越难。

  • 4 类字符集(小写 26 + 大写 26 + 数字 10 + 符号 28 ≈ 90 个字符),单个字符约 6.49 bits
  • 仅小写字母(26 个),单个字符约 4.70 bits
  • 仅数字(10 个),单个字符约 3.32 bits

结论:长度比字符集更重要。12 位仅小写字母的熵(56.4 bits) 高于 8 位四类字符集的密码(51.9 bits)。建议优先保证长度 ≥ 16,再追求字符集多样性。 NIST SP 800-63B 建议用户密码至少 8 位,但现代暴力破解速度下 12-16 位更稳妥。

为什么不能用 Math.random 生成密码?

Math.random 是基于伪随机数生成器(PRNG)的,输出可被预测, 不适合安全敏感场景。攻击者若能收集足够输出,可重建内部状态并预测后续随机数。

本工具使用浏览器原生 crypto.getRandomValues, 基于加密安全的伪随机数生成器(CSPRNG),其随机性满足密码学要求, 适用于会话令牌、API 密钥、密码等安全场景。

什么是"模偏差"?为什么需要拒绝采样?

简单实现 charset[random % charsetSize] 在 charsetSize 不整除 256 时 会导致字符出现概率不均。例如 charsetSize = 90,则前 36 个字符的概率比后 54 个高约 1.4%。

本工具采用拒绝采样(rejection sampling)消除模偏差: 先取一个随机字节(0-255),若其值 ≥ floor(256/charsetSize) × charsetSize 则丢弃重新取,直到落入均匀分布区间。最坏情况重试概率仅约 1-3%,平均 1.01 次。

强度评估的等级是怎么划分的?

本工具基于熵值(bits)划分 5 个等级,参考 NIST SP 800-63 与常见实践:

  • 极弱(<28 bits):可被秒级破解,不建议使用
  • 弱(28-36 bits):分钟级破解,仅用于低敏感场景
  • 一般(36-60 bits):本地暴力需数小时-数天
  • 强(60-100 bits):在线破解不可行,离线暴力需数年
  • 很强(≥100 bits):离线暴力也不可行,适用于加密密钥

参考阈值:在线攻击可破解约 30 bits 的密码;离线 GPU 暴力可破解约 60 bits; 要抵御国家级攻击需 ≥ 128 bits。

排除易混字符是什么意思?什么时候用?

部分字符在常见字体下视觉相近,人工抄写或口头告知时易混淆:

  • 数字 0 与字母 O / o
  • 数字 1 与字母 l(小写 L)/ I(大写 i)
  • 符号 | 与字母 l / 数字 1
  • 引号 '" 在终端字体下难以区分

建议:需打印、手抄、口头传达的密码(如 WiFi 密码、会议口令)勾选此项; 纯数字存储的密码(如密码管理器自动填充)无需勾选。

生成的密码会被记录或上传吗?

不会。本工具完全在浏览器内运行,使用 crypto.getRandomValues 在本地生成密码, 所有数据不离开你的设备,不会上传到任何服务器,也不会被记录。 生成后建议立即复制到密码管理器(如 Bitwarden、1Password)保存。

如需配套生成 UUID(用于 API 令牌、会话 ID),可使用 UUID 生成器;如需对密码进行哈希摘要,可使用 Hash 计算工具

密码应该多久更换一次?

现代安全实践(包括 NIST SP 800-63B)不再建议定期强制更换密码, 除非怀疑已被泄露。频繁强制更换反而促使用户选择弱密码或仅做最小变更(如 password1 → password2)。

更有效的做法

  • 每个网站使用独立密码(用密码管理器管理)
  • 密码长度 ≥ 16 位,熵 ≥ 60 bits
  • 开启两步验证(2FA / MFA)
  • 关注 Have I Been Pwned 等泄露通知服务
符号集包含哪些字符?为什么避开空格和引号?

本工具符号集为 !@#$%^&*()-_=+[];:,.?/,共 22 个字符。 避开以下字符以提升兼容性:

  • 空格:粘贴到表单时易被截断或前后丢失
  • 双引号 " 与单引号 ':在 SQL、Shell、HTML 中需转义,易引发注入或解析错误
  • 反斜杠 \:在 Shell、JSON、正则中是转义字符
  • 尖括号 <>:在 HTML 中是标签边界

如需更严格的符号集,可在使用前手动筛选。