随机密码生成

按长度和字符类型生成随机密码,随机来源是浏览器内置的密码学安全接口 crypto.getRandomValues()纯本地生成、不经过网络,不留任何记录,刷新页面即清空。

生成设置

范围 6 ~ 64 位,默认 16 位。当前 16 位
「全部」这一档在常见符号的基础上再加 []{}<>?/\|~`;:,.!"' 这些字符(含引号、反斜杠、反引号), 密码更强,但粘进命令行、配置文件或 SQL 时容易被转义、截断,那种场合建议只用「常见符号」; 勾了「全部」就自动包含「常见」这一档,不用两个都勾。
勾上后这些字符会从字符池里剔除,需要人工抄写或口头念给别人的密码非常实用; 代价是字符池变小、熵略降,降了多少看下方结果区的实际数值。

🔐 随机来源只有一处:crypto.getRandomValues(),由操作系统提供熵源的密码学安全随机数。 本页不使用 Math.random(),也不写 localStorage / sessionStorage / Cookie,刷新即清空。

生成结果

为什么不能用 Math.random() 生成密码

Math.random() 用起来顺手,但它不是为安全场景设计的:它给的是「看起来随机」的伪随机数, 由初始种子按固定公式推出来,种子一样,后面的序列就一样。它追求的是分布均匀、跑得快, 而不是让人猜不到下一个数是什么

密码是钥匙,钥匙必须不可预测。用可预测的随机源生成密码,等于把「猜密码」降级成「按顺序试」, 所以本页生成密码时一个 Math.random() 都没有用, 用的是浏览器内置的 crypto.getRandomValues():它从操作系统取熵,输出不可预测、不可反推, 是专为密码学用途准备的接口。浏览器不支持它时,本页直接拒绝生成,而不会退回弱随机源。

长度比复杂度更重要

衡量强度最实用的指标是(单位 bit):熵 = log2(字符池大小) × 长度。 字符池就是允许出现的所有字符:只勾小写字母是 26 个,加上大写字母和数字是 62 个。代入看看:

看着更复杂的 8 位,熵反而低了近 30 bits——每多 1 bit,要试的组合就翻一倍。 原因是加长度是乘法,加字符类型只是加法:长度从 8 翻到 16,熵直接翻倍; 字符池从 26 扩到 62,熵只涨不到三成。只能改一处的话,先改长度。

所以:先加长度,再谈字符类型。

多长算够?日常账号 16 位起步,邮箱、网盘这类丢不起的账号给到 20 位以上。

不要一码多用

密码的安全性不只取决于它多难猜,还取决于它被多少个地方同时信任。 同一个密码在论坛、购物、邮箱、办公系统里反复用,等于把所有账号的安全等级拉平到最弱的那一个: 任何一家被拖库,对方拿到的就是一把能开你所有门的总钥匙。而且这类尝试是自动化的,不需要人盯着。 每个网站一个独立密码,最坏情况就被关在那一家里。

实际该怎么做

关于这个页面

密码都在你的浏览器里现算,不联网、不上传、不写 localStorage 或 Cookie,刷新即清空, 服务器端查不到任何记录——你可以开着开发者工具边生成边看,全程不会产生请求。 也正因如此,本站没办法帮你找回密码:请当场把它存进密码管理器,关掉页面就真的没了。

在公用电脑上,屏幕本身也是一种泄露途径,生成后记得清掉剪贴板再关页面。


本工具完全在你的浏览器里运行,不保存任何生成结果。

← 返回工具箱