长随机密码,在你的浏览器里生成。不联网,不记录,不上传。
按 空格键 换一个,C 复制。密码由本机的 crypto.getRandomValues 生成,页面不加载任何外部资源。
每个密码都来自 crypto.getRandomValues,也就是浏览器的密码学安全随机源。它不是 Math.random —— 后者快,但可预测,绝不能用来生成任何机密。取字符时用的是拒绝采样:如果直接把随机数对字符集大小取模,排在前面的字符会悄悄地更容易被选中,所以超出范围的抽样会被丢弃重来。
你勾选的每一类字符都会先放进去一个,然后整串重新洗牌,这样「保证包含」就不会固定出现在某个位置上。强度读数是以位为单位的熵 —— 长度乘以字符池大小的以 2 为底的对数。每多一位熵,攻击者要穷举的候选数量就翻一倍。
破解耗时按最坏的现实情况估算:攻击者已经拖走了密码库,在本地对一个快速哈希发起离线攻击,每秒尝试一千亿次。显示的是平均值,也就是穷举一半密钥空间所需的时间。所有计算都在你的设备上完成 —— 页面不加载任何外部脚本、字体或图片,不发出网络请求,也不存储任何东西。关掉标签页就足以让这个密码彻底消失。
但凡重要一点的账号,16 个随机字符起步。四类字符全开时这大约是 104 位熵,远远超出离线破解今天以及可预见的将来所能触及的范围。短密码之所以不安全,是因为熵随长度增长,每少一个字符,攻击者的工作量就成倍地减少。
不一定。长度带来的安全性远比字符种类多。20 位的小写字母加数字,比 12 位的四类全开更强。网站接受符号就打开,遇到某些老系统不接受也不必纠结,关掉再多加几个字符补回来就是了。
看不到。生成过程完全在你的浏览器内完成。这个页面没有服务端,没有统计分析,加载完成后不发出任何网络请求。密码根本没有地方可去,这一点你可以自己在浏览器的网络面板里核实。
安全。crypto.getRandomValues 是 Web Crypto 标准中的密码学安全伪随机数生成器,由操作系统的熵池播种。它和生成加密密钥用的是同一类原语,其设计目标之一就是:即使看到过去的输出,也无法据此推断未来的输出。
它是「生成器可能产出多少个等概率密码」这个数字的以 2 为底的对数。60 位熵大约是一百亿亿个候选。因为这个刻度是对数的,从 60 位涨到 80 位不是强了三分之一,而是强了约一百万倍。
它会移除手写或朗读时容易认错的字符:大写 I、小写 l、数字 1、竖线,大写 O、数字 0、小写 o,以及各种引号。需要照着纸抄或者口头念给别人的密码适合打开它。它会缩小字符池,因此每个字符携带的熵会略微下降 —— 上面的读数已经把这一点算进去了。
不需要。随机密码是用来存的,不是用来记的。把它们放进密码管理器,只记住管理器的主密码 —— 那才是唯一值得用一句你真能想起来的长口令的地方。
可以 —— 这样用的时候,它既是密码生成器也是在线密钥生成器。输出本来就只是一串随机字符,因此可以当作 API 密钥、数据库或会话令牌、Wi-Fi 密码,或者盐值。只给机器读的东西,长度直接拉到 32 位以上;反正没人会手动敲,没有理由留短。如果某个系统只接受特定字符,把它不接受的类别关掉即可。
免费,不需要账号,也没有使用次数限制。没有付费档位,没有任何需要注册的东西。页面里没有广告联盟、没有第三方脚本,也没有任何形式的追踪。