随机密码是怎么生成的

32 0

随机密码是按设定的长度和字符集,由密码学安全的随机数逐位抽取字符得到的口令。下面说明背后的原理。

随机密码是怎么生成的

生成器先确定字符集(例如 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。

文中示例可以在本站对应工具中核对。生成和保存密码等敏感信息时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: 密码 密码生成

抱歉,评论功能暂时关闭!