D
开发工具箱

密码生成器详解:什么样的密码才算强

安全工具 2026年6月17日 约 1 分钟阅读

为什么需要密码生成器?

人的”随机”根本不随机。让你想一个密码,大概率是 名字拼音+生日单词+123qwerty 这类组合。问题是这类密码在攻击者的字典里早就排好了——他们统计过几亿个真实泄露密码,最流行的几万个覆盖率惊人。你自己”瞎想”的密码,在撞库工具眼里基本是明文。

密码生成器的作用是用真随机替代人脑的伪随机,生成攻击者无法预测的字符串。它的核心不是”生成一串乱码”这么简单,而是控制密码的(不确定性)到足够大的程度。

熵:衡量密码强度的唯一标尺

密码强度只有一个数学定义:熵(bits of entropy),也就是密码可能取值的总个数的以 2 为底的对数。

熵 = log₂(字符集大小^长度) = 长度 × log₂(字符集大小)

举个例子:

密码字符集长度
1234数字(10)413 位
abcd小写(26)419 位
password小写(26)838 位(理论值)
aB3$x大小写+数字+符号(94)533 位
Tr0ub4dour&3全字符集(94)1279 位
correcthorsebatterystaple小写(26)25118 位

注意两点:

  1. password 理论熵 38 位,实际强度接近 0——因为它在字典里。熵公式只对”真随机”的密码成立,人造密码因为可预测,实际熵远低于理论值。这正是用生成器的原因
  2. 长度比复杂度更重要——correcthorsebatterystaple 全是小写字母,但因为够长,熵比满是符号的短密码高得多

长度 vs 字符集:该卷哪个?

很多人以为密码强不强看”有没有特殊字符”,其实长度才是主战场。看这张表,假设全字符集大小 94:

长度大致暴力破解时间(GPU 10^10/秒)
852 位秒级
1066 位小时级
1279 位几百年
16105 位宇宙年龄的若干倍
20131 位物理上不可行

每多一位,熵加 log₂(94)≈6.6 位,破解时间乘以约 100 倍。从 12 位到 16 位带来的安全增益,远大于把 8 位密码塞满符号

实践建议:

  • 网站密码:16 位起,大小写+数字+符号全开(因为很多网站限制长度,得靠字符集补熵)
  • 密码管理器主密码:可以用更长的纯单词组合(如 4-5 个随机单词,类似 diceware),好记又高熵
  • API key / token:32 位以上纯随机串

真随机 vs 伪随机:CSPRNG 是底线

密码生成器的随机源决定了它能不能用。普通编程语言的 Math.random()rand()伪随机,用确定算法生成,知道种子就能预测整个序列——这种随机源生成的密码,攻击者只要猜到种子(往往是时间戳)就能复现你的所有密码。

密码生成必须用 CSPRNG(密码学安全的伪随机数生成器)

  • 浏览器:crypto.getRandomValues()
  • Node.js:crypto.randomBytes()
  • Python:secrets 模块(不是 random!)
  • Java:SecureRandom

CSPRNG 从操作系统的熵池(收集硬件噪声、键盘鼠标时序等真随机源)取种,输出不可预测,适合做密码。本站的密码生成器就是基于浏览器 CSPRNG,生成的密码不会离开你的设备。

易混淆字符:可选的人性化设计

0 O o1 l I| 这些字符在不同字体里长得几乎一样,手抄或口述密码时极易出错。很多生成器提供”排除易混淆字符”选项,去掉 0O1lI| 等。这会略微降低字符集(从 94 降到 ~88),熵损失可以忽略,但对需要人工读写的场景(如 WiFi 密码贴墙上)很友好。

类似的人性化选项还有:

  • 排除相似字符:去 0O1lI
  • 必须包含每类字符:保证大小写、数字、符号都至少出现一个(避免极小概率生成全是字母的密码)
  • 可读模式:用辅音+元音拼成假单词,好记但熵略低

一个常见误区:一个密码走天下

再强的密码,用在不同网站上,只要其中一个网站泄露(且它用明文或弱哈希存),攻击者就拿这个密码去其他站撞库。所以正确的姿势是:

  1. 每个网站用独立的随机密码
  2. 密码管理器统一存储(Bitwarden、1Password、KeePass 等)
  3. 只需记住一个主密码(这个才需要又长又好记)

密码生成器是这套体系的”弹药库”——为每个站点发一个不可预测的独立密码。配合 [[password-strength]] 检测强度,再用 [[bcrypt]] 哈希存储(如果你在做后端),密码安全链路才完整。

小结

强密码的本质是高熵 + 真随机。记住两个关键认知:长度比符号复杂度更值钱(卷长度优先),随机源必须是 CSPRNG(普通 random 不行)。生成器帮你把这两件事自动化,但真正让密码体系安全的是”每站独立 + 密码管理器”的使用习惯——单点密码再强,也抵不过一处泄露全盘沦陷。