密码生成器
在线随机生成高强度密码,可调长度与字符类型,实时给出强度评分与破解耗时估算,全程在你自己的浏览器里完成
强度:等待生成
历史记录
历史记录只保存在你这台设备的浏览器里,最多保留最近 20 条。点击密码即可复制,不需要的可以单条删除或一键清空。
| # | 生成时间 | 密码(点击复制) | 操作 |
|---|
还没有生成记录。生成的密码会自动出现在这里,换一台设备或清理浏览器数据后记录会消失。
在线密码生成器怎么用
- 拖长度滑块:默认 16 位,范围 6 到 64 位。注册普通网站用 16 位足够,遇到只允许 8 到 20 位的老系统,就把长度调到它接受的上限。
- 勾选字符类型:小写、大写、数字、符号四类默认全开。有些银行的密码框只收数字,那就只留数字,工具会按你选的类型重新计算强度。
- 排除易混淆字符:需要把密码抄在纸上或念给别人听时勾上,会去掉 0、O、l、I、1、| 这些长得像的字符。
- 点生成:右侧立刻出结果,同时给出强度等级和破解耗时估算。不满意就再点一次,每次结果都不一样。
- 复制保存:点「复制密码」粘贴到注册表单,或者直接存进密码管理器。生成的密码会同步进下方的历史记录。
整个生成过程在浏览器本地完成,页面不会把密码发到任何服务器。你可以断网后再点生成,功能照常可用——这一点可以用浏览器的开发者工具在 Network 面板里验证。
密码强度是怎么算出来的
强度不是拍脑袋给的星级,而是算出密码的信息熵,单位是比特(bit)。公式为:熵 = 密码长度 × log₂(可用字符数)。 它衡量的是「攻击者平均要试多少次才能猜中」,每多 1 比特,尝试次数翻倍。
| 密码构成 | 可用字符数 | 熵 | 离线爆破耗时 |
|---|---|---|---|
| 8 位纯数字 | 10 | 26.6 bit | 不到 1 秒 |
| 8 位小写 + 数字 | 36 | 41.4 bit | 约 2 分钟 |
| 8 位大小写 + 数字 | 62 | 47.6 bit | 约 3 小时 |
| 8 位四类全开 | 83 | 51.0 bit | 约 1 天 |
| 12 位四类全开 | 83 | 76.5 bit | 约 17 万年 |
| 16 位四类全开 | 83 | 102.0 bit | 远超宇宙年龄 |
表里「四类全开」的字符数是 83 而不是常见的 94,因为本工具的符号集挑了 21 个最通用的符号, 刻意避开了引号、反斜杠、空格和飘号——它们在某些系统的输入框、配置文件或命令行里会引发转义麻烦。 如果按完整 94 个可打印字符计算,同样的长度还会再高一点点。
上表的耗时按每秒 100 亿次的离线破解速度估算,大致相当于几块高端显卡跑未加盐的快速哈希。 这是攻击者拿到网站数据库后的场景,也是本工具估算的基准。真实情况里,用 bcrypt、Argon2 这类慢哈希并加了盐的系统, 同样的密码要多花几万倍时间,安全性还会再上一个台阶。
另一种场景是在线爆破,也就是对着登录框反复试密码。网站的限流和锁定策略通常把它压到每秒几次, 这种情况下哪怕只有 40 bit 的密码也很难撞开。所以真正危险的不是有人猜你的密码,而是网站数据库泄露后被离线批量破解—— 这也是为什么「一个网站一个密码」比「把密码设得再复杂」更重要。
长度比复杂度更管用
看上面那张表能发现一件事:字符集从 10 个扩到 94 个(接近 10 倍),熵只增加了约 2 倍; 而长度从 8 位加到 16 位(2 倍),熵也翻了 2 倍。字符种类带来的增长是对数级的,长度带来的增长是线性的, 所以把密码加长,比往里面塞更多符号划算得多。
这也解释了为什么 P@ssw0rd、Abc123!@# 这类「看起来很复杂」的密码其实不堪一击。
它们只是把字典词做了固定替换,a 换成 @、o 换成 0、结尾补个感叹号,这些规则早被写进攻击字典,
破解工具会优先尝试。机器随机生成的 16 位字符串没有任何模式,哪怕看起来没有感叹号那么"有安全感",实际强度高出几个数量级。
另外几个该避开的套路:用姓名、生日、手机号、公司名拼密码,按键盘顺序走(qwerty、1qaz2wsx), 以及所有网站共用同一套密码。最后一条最危险——只要其中一个小论坛拖库,你所有的账号都会被连带爆破。
关于随机数:为什么不用 Math.random()
本工具用的是浏览器内置的 crypto.getRandomValues(),它读取操作系统的熵池(鼠标移动、键盘时序、硬件噪声等),
属于密码学安全随机数发生器(CSPRNG),无法根据前面输出的结果预测下一位。
而 Math.random() 是普通伪随机数发生器,内部状态有限且算法公开,只要拿到连续若干个输出值,
就能反推出内部状态并预测后续所有结果。用它生成验证码、会话令牌、密码,等于把钥匙和锁一起交给别人。
这个区别平时看不出来,但一旦被针对性攻击,就是灾难性的。
工具里还做了一个容易被忽略的处理:消除取模偏差。 如果直接用随机数除以字符集大小取余数,当字符集大小不能整除随机数范围时,靠前的字符出现概率会略高。 这里用的是拒绝采样——落在不完整区间的值直接丢弃重新生成,保证每个字符被选中的概率严格相等。
密码生成之后,还该做什么
- 用密码管理器存起来:Bitwarden、1Password、KeePass 或者浏览器自带的密码库都行。只需要记住一个主密码,其余全部交给它,顺便解决"每个网站一个密码"的问题。
- 重要账号开两步验证:邮箱、支付、云盘、域名注册商这些地方,开 TOTP 或硬件密钥。密码泄露后,两步验证是最后一道防线。
- 换个密码不如换个思路:主流安全指南(如 NIST SP 800-63B)已经不再建议定期强制改密码,因为频繁更换会逼着用户用更弱的密码或写在便签上。真正该改的时机是:这个网站宣布泄露、你在可疑设备上登录过、或者密码被分享出去了。
- 需要手输的场合用口令:电脑开机密码、手机解锁码这类要经常手动输入的长密码,可以用四个随机词拼起来(比如"窗帘-核桃-电梯-菠菜"),长度够、有画面感,比一串符号好记也够安全。
- 检查旧密码是否已经泄露:在 haveibeenpwned 这类站点输入邮箱,可以查到自己的账号是否出现在已知的泄露库里,命中了就立刻换掉。
密码生成器常见问题
生成的密码会被上传到服务器吗?
不会。密码在你的浏览器里用 Web Crypto 接口现场生成,页面不发送任何网络请求,历史记录只写入你设备的本地存储,网站运营方和其他用户都看不到。你可以断网后刷新页面再试,功能完全正常。
密码设多长才安全?
包含大小写字母、数字和符号时,12 位就足以挡住离线暴力破解,16 位以上属于冗余。如果网站限制了长度,优先把长度用满,再考虑加符号——长度带来的强度增长是线性的,符号带来的增长是对数的。
反过来,如果网站只允许 6 位(比如某些银行的支付密码),那它通常会配合错误次数锁定和短信验证,安全性靠的是机制而不是密码本身。
为什么不建议自己想一个复杂密码?
人脑构造的密码看似复杂,实际都有模式:首字母大写、结尾加数字加感叹号、用名字加生日。这些规则早就在攻击字典里,破解工具会优先尝试。机器随机生成的字符串没有规律可循,攻击者也只能老老实实穷举。
有些网站不接受符号,怎么办?
把「符号」那一项取消勾选,只保留字母和数字,重新生成即可,强度会按新的字符集重新计算。本工具默认使用的符号集避开了引号、反斜杠和空格,就是为了减少在配置文件、命令行和 URL 里需要转义的麻烦,但仍有少数系统的输入框会做额外限制。
历史记录会一直留在电脑上吗?
历史记录保存在浏览器的本地存储(localStorage)里,最多 20 条,超出后自动丢弃最旧的。可以随时点「清空历史记录」,或单独删掉某一条。清理浏览器数据、更换浏览器、换设备或使用无痕模式时,记录都不会保留。
需要说明的是,共用电脑时别人打开同一个浏览器也能看到这些记录。在公共设备上使用完,记得清空。
可以用它生成 Wi-Fi 密码或服务器 root 密码吗?
可以,而且推荐这么做。这类密码的使用周期长、一旦泄露影响范围大,用随机生成的长密码比自己想的要稳妥得多。生成后记得同时保存到一个可靠的地方——路由器密码尤其容易在重置后丢失。