怎么用
拖动滑块设定长度,勾选需要的字符类型,点重新生成,再点复制。就这三步。
如果某个网站不接受符号,取消勾选符号;如果密码要手抄或者念给别人,勾选排除易混淆字符,生成结果里就不会出现 0 与 O、1 与 l 与 I 这几组容易看错的字符。
密码要多长才算够
判断密码强度只有一个靠谱指标:熵,单位是位(bit)。它衡量的是「要把所有可能性试一遍需要多少次尝试」。熵每增加 1 位,破解难度翻一倍。
下表按每秒 1012 次猜测估算——这是现代 GPU 集群攻击快速哈希的量级:
| 密码 | 字符池 | 熵 | 暴力破解耗时 |
|---|---|---|---|
| 6 位纯数字 | 10 | 19.9 位 | 不到 1 秒 |
| 8 位纯数字 | 10 | 26.6 位 | 不到 1 秒 |
| 8 位纯小写字母 | 26 | 37.6 位 | 不到 1 秒 |
| 8 位全字符 | 85 | 51.3 位 | 约 45 分钟 |
| 12 位全字符 | 85 | 76.9 位 | 约 4,500 年 |
| 16 位全字符 | 85 | 102.6 位 | 约 2,400 亿年 |
| 20 位全字符 | 85 | 128.2 位 | 远超宇宙年龄 |
这张表里最该记住的一行是第四行到第五行之间的落差:8 位全字符只撑 45 分钟,12 位就要 4,500 年。多四个字符,难度涨了约五千万倍。
实用建议:
- 一般网站:12 位起步
- 邮箱、网银、主力社交账号:16 位——邮箱尤其重要,因为所有其他账号都靠它找回
- 加密钱包、服务器:20 位以上
需要说明的是,上表算的是最坏情况:网站把密码存成了快速哈希。如果对方用了加盐的慢哈希(bcrypt、Argon2 这类),实际耗时还要长几个数量级。但你无法知道某个网站用了哪种,所以按最坏情况准备才是对的。
长度比复杂度重要得多
「必须包含大小写、数字和特殊符号」这条规则流传了二十年,但它解决的问题和大多数人以为的不一样。
看一下数学:
| 方案 | 熵 |
|---|---|
| 8 位,大小写+数字+符号 | 51.3 位 |
| 12 位,只有小写字母 | 56.4 位 |
后者更简单、更好记、更好输入——而且更安全。
复杂度规则真正的作用,是阻止人们用 password123 这种东西。一旦密码是随机生成的,长度就是唯一还在起作用的变量。所以这个工具默认 16 位,而不是默认堆满符号。
为什么要在本地生成
搜索「密码生成器」会出来很多网站。它们之中有一部分,是把参数发到服务器、由服务器生成后再返回给你。
这意味着你的新密码在生成的那一刻,就已经离开过你的电脑,经过了别人的服务器。对方有没有记录,你无从验证。
本页的做法不同:
- 密码由浏览器内置的
crypto.getRandomValues()生成,这是浏览器提供的加密级随机数接口,不是普通的Math.random() - 全过程在您的设备上完成,没有任何网络请求
- 页面不保存、不记录、不统计生成过的任何密码
- 关闭标签页,一切痕迹消失
想验证这一点不难:断开网络连接,这个页面照样能生成密码。能离线工作的工具,就不可能把数据传给谁。
关于 Math.random 的那点区别
很多简易生成器用的是 Math.random()。它的设计目标是「看起来随机」,适合做动画和游戏,但它的输出序列是可以被推算的——观察到足够多的输出之后,就能预测接下来会出现什么。crypto.getRandomValues() 则由操作系统的加密随机源提供,专门用于安全场景。
本工具还处理了一个细节:生成随机数时采用拒绝采样,避免简单取模带来的分布偏差。否则字符池里排在前面的字符会被略微多选中,密码的实际熵会低于理论值。
生成之后,怎么保管
一个 16 位的随机密码没人记得住——这是设计使然,也带来一个新问题。
- 用密码管理器。浏览器自带的就够用,专门的工具更好。核心原则是:你只需要记住一个主密码,其余全部交给它
- 每个网站一个密码。随机密码的价值在于隔离:某一个网站被拖库,其他账号不受牵连。重复使用会让这个优势归零
- 给邮箱和密码管理器开启两步验证。这两个是总钥匙
- 不要存在记事本或 Excel 里。明文文件是最容易被忘记、也最容易被整个拷走的东西
- 不要通过微信或邮件发送密码。这两条链路都会留下长期可检索的副本
常见问题
这个随机密码生成器安全吗?
密码在您的浏览器本地生成,不发送到任何服务器,也不被记录。可以断网后使用,以此验证。
生成的密码会重复吗?
理论上存在可能,实际上可以忽略。16 位全字符密码有约 2102 种组合,这个数字远大于地球上所有沙粒的总数。
密码生成器用什么随机数?
浏览器的 crypto.getRandomValues(),由操作系统提供的加密级随机源,而非 Math.random()。
为什么有的网站不接受我生成的密码?
部分网站限制长度上限或禁止某些符号。遇到这种情况,先取消勾选符号,再适当缩短长度。这是网站的限制,不是密码的问题。
密码多长比较合适?
一般网站 12 位,邮箱和网银建议 16 位,加密钱包等高价值账号 20 位以上。
为什么要排除易混淆字符?
0 和 O、1 和 l 和 I 在很多字体下几乎一样。如果密码需要手写、口述或者在另一台设备上手动输入,排除它们能省掉很多麻烦。代价是字符池变小、熵略微下降,适当增加长度即可补回。
可以生成多个密码吗?
可以,每点一次重新生成就是一个全新的密码。复制好当前这个之后再点下一次即可。
延伸阅读: