为什么需要随机密码生成器
绝大多数人自己想出来的密码,都比自己以为的要弱得多。生日、姓名拼音、123456、admin888,或者把常用密码加个感叹号——这些模式早就被收录在攻击者的字典里。真正的问题不在于「想不出复杂密码」,而在于人脑天生不擅长产生随机性。
即使你刻意打乱键盘敲出一串字符,也会不自觉地偏好某些手指顺序和字母组合。密码生成器解决的正是这件事:用密码学级别的随机源,生成毫无规律可循的字符串。
本工具的技术实现
使用加密安全的随机数
本工具使用浏览器内置的 crypto.getRandomValues() 生成随机数,它是一个加密安全伪随机数生成器(CSPRNG),随机源来自操作系统维护的熵池。
需要特别说明的是,本工具没有使用 Math.random()。后者虽然在日常编程中很常见,但其输出是可预测的——已有研究证明,攻击者在观察到少量输出后即可推算出内部状态并预测后续所有结果。任何涉及密码、令牌、密钥的场景都不应使用它。
避免模偏差
一个容易被忽略的细节:把随机数映射到字符集时,如果直接用取余运算(随机数 % 字符集长度),会导致靠前的字符出现概率略高于靠后的字符,这叫模偏差(modulo bias)。虽然单次偏差很小,但它系统性地削弱了密码的实际强度。
本工具采用拒绝采样(rejection sampling):当随机数落在会造成偏差的区间时直接丢弃并重新取样,确保每个字符被选中的概率完全均等。
保证字符类型齐全
很多网站要求密码必须同时包含大小写、数字和符号。如果纯随机生成,短密码有一定概率缺少某个类别。本工具会先从每个被勾选的类别中各取一个字符,再随机补足剩余长度,最后用 Fisher-Yates 算法(同样使用加密级随机源)打乱顺序——这样既满足复杂度要求,又不引入可预测的位置规律。
密码到底该设多长
密码强度用熵来衡量,单位是比特(bit),计算公式为:
熵 = log₂(字符集大小) × 密码长度
熵值每增加 1 比特,暴力破解所需的时间就翻一倍。以下是常见配置的对照:
| 密码配置 | 字符集大小 | 长度 | 熵值 | 评价 |
|---|---|---|---|---|
| 纯数字 | 10 | 6 | 约 20 比特 | 瞬间破解 |
| 纯小写字母 | 26 | 8 | 约 38 比特 | 很弱 |
| 大小写+数字 | 62 | 8 | 约 48 比特 | 弱 |
| 大小写+数字 | 62 | 12 | 约 71 比特 | 较强 |
| 全字符集 | 87 | 16 | 约 103 比特 | 非常强 |
| 全字符集 | 87 | 20 | 约 129 比特 | 极强 |
一个反直觉但极其重要的结论:长度比复杂度更有效。
对比一下:16 位纯小写字母密码的熵约为 75 比特,而 8 位混合了大小写、数字、符号的密码熵只有约 52 比特。前者看起来「简单」,实际却安全得多。所以当你在「加两个特殊符号」和「多加四位长度」之间犹豫时,永远选择加长度。
推荐标准:
- 一般网站账户:12 位以上
- 邮箱、网银、支付账户:16 位以上
- 密码管理器主密码、加密卷密码:20 位以上
关于易混淆字符
选项中的「排除易混字符」会移除 0、O、o、1、l、I 等在常见字体下难以分辨的字符。是否需要开启,取决于你的使用方式:
- 需要开启:密码要手写抄录、在电视或投影上显示、口头告知他人、录入到没有粘贴功能的设备(如某些路由器管理界面、游戏主机)
- 不必开启:全程复制粘贴使用,或存进密码管理器
注意排除字符会略微缩小字符集,降低单个字符的熵。不过只要相应增加两三位长度,就能完全补偿这点损失。
更重要的事:不要重复使用密码
生成了强密码,也解决不了另一个更普遍的风险——同一个密码用在多个网站。
现实中大量的账号失窃并非因为密码被暴力破解,而是源于「撞库」:某个安全措施薄弱的小网站被拖库,攻击者拿到你的邮箱和密码后,直接去各大平台挨个尝试。你的密码再强,只要在别处泄露过一次,就等同于失效。
正确做法是每个网站使用不同的随机密码,并用密码管理器统一保管。你只需要记住一个足够强的主密码,其余交给工具。常见的选择包括 Bitwarden(开源、有免费版)、1Password、KeePass(完全离线)等。
隐私说明
本工具的全部逻辑运行在你的浏览器中,具体来说:
- 生成密码时不产生任何网络请求
- 生成的密码不会被发送、上传或记录到任何服务器
- 本站不使用 Cookie 或本地存储保存你生成的密码
- 页面关闭后,所有内容即从内存中消失
如果你想验证这一点,最简单的方法是:打开本页面后断开网络连接,工具依然可以正常生成密码。你也可以按 F12 打开浏览器开发者工具,在「网络」面板中观察——生成密码的过程不会有任何请求发出。