首页 / 教程文章 / 强密码是怎么生成的?密码熵、随机数与安全生成器完全指南

强密码是怎么生成的?密码熵、随机数与安全生成器完全指南

发布于 2026-08-17 20:25:02 · 59 阅读 · 标签:密码安全,密码熵,随机数,网络安全

密码强度不是长度问题,是熵问题

密码学的强度用熵(Entropy)衡量,单位是 bit。熵代表“猜测的难度”:每多 1 bit,破解尝试次数翻倍。计算公式:熵 = 长度 × log₂(字符集大小)。20 位“聪明密码”(如 P@ssw0rd2026!)看着长,但字符组合固定、字典里就有,实际熵可能不足 30 bit。

3 种随机数:别用错

  1. Math.random():伪随机,可被预测,严禁用于密码
  2. crypto.getRandomValues():浏览器内置密码学级 CSPRNG,安全
  3. secrets / os.urandom(Python)、/dev/urandom:服务端标准做法

为什么 Math.random() 不行?它的种子来自时间等可观测输入,攻击者结合生成时间即可缩小搜索空间。真正的随机密码必须用 CSPRNG(密码学安全伪随机数生成器)。

12 位随机密码 vs 20 位聪明密码

假设字符集 94 种(大小写+数字+符号):

12 位随机:94^12 ≈ 4.7×10^23,熵约 78 bit
20 位聪明:字典模式,熵常低于 40 bit
78 bit 需要暴力尝试的次数,是 40 bit 的 2^38 倍

所以行业共识:长度 ≥ 12 的完全随机密码,配合密码管理器使用,比“短而巧”安全得多。

易混字符:0O1lI 的代价

手抄密码时 0O1l 极易混淆。在需要人工抄写的场景(如 Wi-Fi 密码贴纸),建议排除易混字符。代价是字符集从 94 降到 88,熵损失极小,可读性收益巨大——这正是 随机密码生成工具 提供“排除易混字符”选项的原因。

安全生成器的正确打开方式

  1. 字符集打散后按 CSPRNG 均匀采样(拒绝采样法避免模偏差)
  2. 长度下限 12 位,敏感账户建议 16 位+
  3. 不要用“看起来随机”的固定模式拼凑,那等于缩小空间
  4. 配合密码管理器存储,而非记忆

需要现成工具可直接使用本站的 随机密码生成器:加密级随机源、实时熵值显示、可排除易混字符。

常见问题

Q:密码熵多少算安全? 70 bit 以上对离线暴力破解已足够(10 年量级),100 bit 以上属于极强(当前算力不可达)。

Q:特殊符号必须要有吗? 只要长度足够且完全随机,纯小写 16 位(75 bit)也比“带符号但短”的密码强。NIST 新指南也明确:长度优先于复杂度

Q:为什么要用 CSPRNG 而不是普通随机? 普通随机数可被观察种子后预测,一旦泄露生成规律,整个密码体系形同虚设。

更多文章