密码生成器
在你的设备上运行,不会发送任何内容。一切都在您自己的设备上完成。您生成的任何内容都不会被发送到任何地方。
强度
非常强103.4 位熵预计破解时间: 2051亿 个世纪
在浏览器本地生成强随机密码和易记的密码短语,并实时显示熵值与破解时间估算。
密码的真正强度来自其熵值 - 即攻击者在猜中您的密码之前需要尝试的可能密码数量 - 这既取决于长度,也取决于每个位置可能出现的不同字符数量。此工具通过 Web Crypto API(而非 Math.random())生成密码学意义上真正随机的密码,或基于单词的密码短语,并为您生成的内容显示实际熵值和大致的破解时间估算,让这些权衡清晰可见,而不是隐藏在一个含糊的强或弱标签背后。没有任何内容在服务器上生成或被发送到任何地方。
常见问题
我应该使用随机密码还是密码短语?
两者都是合理的选择,2024 年 NIST 数字身份指南明确倾向于优先考虑长度而非强制性的复杂度规则。随机密码每个字符携带更多熵值,非常适合由密码管理器为您记住的场景。密码短语——将若干个随机单词串联起来——用每字符略少的熵值换取了人类真正能够记住并输入的内容,这对主密码或任何需要凭记忆输入的内容都很重要。
熵位数到底意味着什么?
每增加一位熵,攻击者需要尝试穷举所有可能性的次数就会翻倍。熵值为 40 位的密码大约有一万亿种可能组合;熵值为 80 位的密码大约有一万亿的一万亿倍种组合。安全指南通常认为,对于无法通过限速或锁定来保护的内容(例如加密密钥或密码管理器的主密码),80 位以上的熵值是优秀的水平。
破解时间估算是如何计算的?
它假设攻击者可以离线访问密码哈希,并以每秒约 100 亿次的速度进行尝试——这大致代表了一个现代 GPU 集群的算力。它旨在传达一个数量级,而非精确预测:实际破解时间在很大程度上取决于目标系统所使用的哈希算法,而此工具无从得知这一点。
为什么要排除 l、1、I、O、0 等易混淆字符?
这些字符在朗读、手写或以某些字体显示时很容易被混淆。排除它们会以少量熵值为代价,换取一个在从屏幕或纸张上抄写时更不容易出错的密码——这对于需要手动输入而非从管理器中粘贴的密码很有用。
随机生成器会不会偏向某些字符而不是其他字符?
不会 - 它在 crypto.getRandomValues() 之上使用拒绝抽样(rejection sampling),而不是简单的取模运算。如果取一个随机字节并计算 byte % 池大小,那么每当池大小不能整除 256 时,靠近池开头的字符就会获得极其轻微的优势;因此生成器会丢弃任何超出范围的值,并重新抽取,直到结果落在能整除的范围内。结果就是,无论你启用了多少种字符类型,每个字符被选中的概率都完全相同。
为什么随机生成的密码总会包含我启用的每种字符类型中至少一个?
在构建字符池之后,生成器会先从你启用的每个类别(大写字母、小写字母、数字、符号)中预留一个字符,然后再用完整字符池填充其余长度,最后将所有字符随机打乱顺序。这保证了你的密码不会意外地全部由字母组成而没有数字 - 这一点很重要,因为许多网站会拒绝缺少某种必需字符类型的密码,即使字符池里本来就包含了它。打乱这一步使用的是同样无偏的随机选择,因此被保证包含的字符不会出现在可预测的位置。