随机密码是按设定的长度和字符集,由密码学安全的随机数逐位抽取字符得到的口令。下面说明背后的原理。
随机密码是怎么生成的
生成器先确定字符集(例如 62 个大小写字母和数字),再从安全随机源取得随机整数,把它映射为字符集中的一个下标,重复到指定长度。为了避免“取模偏差”,规范的实现会丢弃落在不能整除范围内的随机数再重取,这样每个字符被选中的概率完全相同。
示例
输入:长度 20,字符集:大小写字母(52 个字符)
生成结果:示例:vhmVmPwazxiSnGSNnXMG;熵约 114.0 位,组合数约 52^20 ≈ 2.09×10^34
说明:熵 = 20 × log2(52) ≈ 114.0 位;示例仅用于说明格式,请勿直接作为自己的密码。
注意事项
- 不要在不可信的网站生成重要密码
- 生成后马上保存,关闭页面就找不回了
- 不要用相同的密码加不同后缀应付多个网站
- 密码管理器的主密码要单独设置且足够长
- 发现泄露立即更换,并开启两步验证
常见误区
- 误区:8 位复杂密码就足够了——离线破解下 8 位已不安全
- 误区:定期改密码越勤越好——频繁更换往往导致密码变弱
- 误区:Math.random 也可以生成密码——它不是密码学安全随机数
- 误区:密码越复杂越好记——随机密码本来就不适合记,交给管理器保存
Python 示例
下面是用 Python 实现的写法,可以按需要修改:
import secrets, string
chars = string.ascii_letters + string.digits + '!@#$%^&*'
pw = ''.join(secrets.choice(chars) for _ in range(16))
print(pw)
本站的密码生成器工具可以直接在网页中使用,无需安装,适合快速得到和核对结果。
常见问题
【16 位随机密码安全吗?】大小写字母加数字的 16 位随机密码约 95 位熵,在当前算力下暴力破解不可行,前提是不重复使用。
【网页生成的密码会被记录吗?】规范的生成器只在浏览器内计算;若不放心,可以断网后生成,或使用密码管理器自带的生成功能。
【为什么不建议用 Math.random?】Math.random 不是密码学安全的随机数,输出在理论上可被预测,生成密码应使用 crypto.getRandomValues。
文中示例可以在本站对应工具中核对。生成和保存密码等敏感信息时,请注意保护隐私。