密码生成器

生成高强度随机密码,可自定义字符集与长度

—

密码强度怎么算:熵、长度与破解成本

强度的量化单位是"熵",不是"看起来复杂"

一个随机生成的密码,其强度可以用信息熵衡量。公式很简单:

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

常见字符集对应的每字符熵:

字符集大小每字符熵
小写字母264.70 比特
大小写字母525.70 比特
大小写 + 数字625.95 比特
大小写 + 数字 + 常用符号946.55 比特
Diceware 词表(单词)777612.9 比特/词

代入公式会得到一个反直觉的结论:

更长但更简单的密码,强于更短但更复杂的密码。复杂度带来的每字符收益是线性的,而长度本身就是乘数。加上长密码更容易记(可以用词组合),所以长度优先。

破解成本:为什么"够不够强"取决于对面怎么存密码

熵只在给定"猜测速度"后才有意义。猜测速度完全由目标站点怎么存密码决定,而你控制不了它:

对方存储方式单卡猜测速度(量级)50 比特要多久75 比特要多久
明文 / 可逆加密不需要破解立即立即
MD5 / SHA-1 裸哈希1011 次/秒小时级数百万年
bcrypt(cost 12)104 次/秒数百年远远超出宇宙年龄
Argon2id(调优参数)103 次/秒数千年不可行

结论:你无法知道对面用什么存,所以要按最坏情况(对方用快哈希)来选密码。这也是为什么现在推荐的长度下限从十年前的 8 位提到了 12-16 位。同时可以看出,问"我的密码强不强"之前,更重要的是不要复用——一次泄漏会把所有用同一密码的账户一起交出去。

随机数来源:Math.random 不能用

很多生成器用 Math.random(),它不是密码学安全的伪随机数生成器。它的内部状态可以被观察到的输出反推,一旦推出状态,之后生成的所有密码都可预测。

正确做法是 crypto.getRandomValues()(Web Crypto API),由操作系统熵池提供,本工具用的是它。你可以自己验证:打开浏览器开发者工具覆盖 Math.random,本工具的输出不受影响,说明它没走那条路。

生成器的几个实际问题

不该做的事

工具支持自定义长度、字符集开关、排除歧义字符与批量生成,全部在本地完成。

常见问题

密码强度够吗?

字符取自 crypto.getRandomValues 加密级随机源,20 位混合字符的搜索空间远超任何暴力破解能力。

会保存我生成的密码吗?

不会。生成过程只在浏览器内存中完成,刷新页面即消失,服务端不接收任何内容。