下面先说明随机密码的定义与基本规则,再给出示例和常见问题。
随机密码的定义与组成
随机密码是按设定的长度和字符集,由密码学安全的随机数逐位抽取字符得到的口令。它不含生日、姓名等可被猜到的信息,强度主要取决于长度和字符集大小。
- 长度不少于 12 位,越长越好
- 不包含用户名、手机号、生日等个人信息
- 不同网站绝不重复使用
- 部分网站限制可用符号,生成前先查看规则
- 不要只靠把字母替换成形近数字(如 a→@)来“加强”
示例
输入:长度 12,字符集:小写字母(26 个字符)
生成结果:示例:pvlhswwxvqwd;熵约 56.4 位,组合数约 26^12 ≈ 9.54×10^16
说明:熵 = 12 × log2(26) ≈ 56.4 位;示例仅用于说明格式,请勿直接作为自己的密码。
工作原理
生成器先确定字符集(例如 62 个大小写字母和数字),再从安全随机源取得随机整数,把它映射为字符集中的一个下标,重复到指定长度。为了避免“取模偏差”,规范的实现会丢弃落在不能整除范围内的随机数再重取,这样每个字符被选中的概率完全相同。
与相关概念的区别
随机密码与“口令短语”(多个随机单词组成,如 correct-horse-battery-staple)各有优点:随机字符密码同等长度下熵更高,口令短语更容易记忆和输入。从常用词表随机抽 5–6 个词,也能达到 60–80 位的熵。
JavaScript 示例
下面是用 JavaScript 实现的写法,可以按需要修改:
function genPassword(len, chars) {
const out = [];
const max = 256 - (256 % chars.length); // 去除取模偏差
const buf = new Uint8Array(1);
while (out.length < len) {
crypto.getRandomValues(buf);
if (buf[0] < max) out.push(chars[buf[0] % chars.length]);
}
return out.join('');
}
本站的密码生成器工具可以直接在网页中使用,无需安装,适合快速得到和核对结果。
常见问题
【网页生成的密码会被记录吗?】规范的生成器只在浏览器内计算;若不放心,可以断网后生成,或使用密码管理器自带的生成功能。
【为什么不建议用 Math.random?】Math.random 不是密码学安全的随机数,输出在理论上可被预测,生成密码应使用 crypto.getRandomValues。
【随机密码记不住怎么办?】交给密码管理器保存,只需记住一个足够长的主密码。
文中示例可以在本站对应工具中核对。生成和保存密码等敏感信息时,请注意保护隐私。