随机密码生成器 在线:一键生成强密码,本地运行不上传服务器

16
密码在您的浏览器本地生成,使用 crypto.getRandomValues 加密级随机数,不经过任何服务器,也不会被记录。关闭页面即消失。

怎么用

拖动滑块设定长度,勾选需要的字符类型,点重新生成,再点复制。就这三步。

如果某个网站不接受符号,取消勾选符号;如果密码要手抄或者念给别人,勾选排除易混淆字符,生成结果里就不会出现 0 与 O、1 与 l 与 I 这几组容易看错的字符。

密码要多长才算够

判断密码强度只有一个靠谱指标:熵,单位是位(bit)。它衡量的是「要把所有可能性试一遍需要多少次尝试」。熵每增加 1 位,破解难度翻一倍。

下表按每秒 1012 次猜测估算——这是现代 GPU 集群攻击快速哈希的量级:

密码字符池熵暴力破解耗时
6 位纯数字1019.9 位不到 1 秒
8 位纯数字1026.6 位不到 1 秒
8 位纯小写字母2637.6 位不到 1 秒
8 位全字符8551.3 位约 45 分钟
12 位全字符8576.9 位约 4,500 年
16 位全字符85102.6 位约 2,400 亿年
20 位全字符85128.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 在很多字体下几乎一样。如果密码需要手写、口述或者在另一台设备上手动输入,排除它们能省掉很多麻烦。代价是字符池变小、熵略微下降,适当增加长度即可补回。

可以生成多个密码吗?

可以,每点一次重新生成就是一个全新的密码。复制好当前这个之后再点下一次即可。

延伸阅读: