0Pricing
Cyber Security Academy · 课时

密码哈希:bcrypt、Argon2、PBKDF2

了解明文存储为何危险,以及加盐哈希如何保护密码

密码哈希:bcrypt、Argon2、PBKDF2 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

为什么不能以明文存储密码

以明文存储密码是灾难性的——一次数据库泄露就会暴露所有账户。密码在存储前必须经过单向函数处理,这样即使有人访问数据库,也无法得出原始密码。

什么是哈希处理

哈希函数会将任意长度的输入转换为固定长度的输出。同一个输入始终产生相同的输出,但无法从哈希值恢复原始内容。示例包括:SHA-256、bcrypt 和 Argon2。

为什么不能使用 SHA-256 处理密码

SHA-256 这类通用哈希函数的设计目标是高速运行。攻击者可以利用 GPU 每秒计算数十亿个 SHA-256 哈希值,使暴力破解变得可行。

密码哈希处理需要使用速度慢且计算成本高的函数。

加盐

盐值是在每个密码进行哈希处理前加入的随机值。它可以确保使用相同密码的两个用户得到不同的哈希值,从而防止彩虹表攻击和批量破解。盐值会与哈希值一同存储(无需保密)。

# Conceptual salt example
hash = bcrypt("password" + random_salt)

bcrypt

bcrypt 于 1999 年专门为密码哈希处理而设计。它具有可配置的成本因子,用于控制哈希处理的缓慢程度。随着硬件性能提升,应提高成本因子以维持安全性。

目前常见的成本因子为 12,在现代 CPU 上完成一次哈希处理约需 250 毫秒。

PBKDF2

PBKDF2(基于密码的密钥派生函数 2)会多次应用哈希函数(例如 HMAC-SHA256),这个次数称为迭代次数。迭代次数越多,处理速度越慢,安全性越高。NIST 推荐使用它,WPA2 也用它处理 Wi-Fi 密码。

Argon2

Argon2 于 2015 年赢得密码哈希竞赛,是现代标准。它可以配置以下参数:

  • 时间成本——迭代次数
  • 内存成本——所需 RAM(限制 GPU 加速)
  • 并行度——线程数

对于大多数应用,请使用 Argon2id。

彩虹表

彩虹表是预先计算好的哈希值到明文的查找表。不加盐时,拥有哈希值的攻击者可以立即在表中查到对应内容。加盐会使每个哈希值都具有唯一性,从而让彩虹表失去作用。

密码破解技术

常见的离线破解方法:

  • 字典攻击——尝试常见密码及其变体
  • 暴力破解——尝试所有字符组合
  • 基于规则的破解——对字典应用变换规则(添加年份、改为首字母大写、进行字母数字替换)
  • 工具:Hashcat、John the Ripper

选择合适的算法

新应用的优先选择顺序:

  1. Argon2id——最能抵抗 GPU/ASIC 破解
  2. bcrypt——支持广泛,经过实践验证
  3. PBKDF2——获 NIST 批准,在某些合规场景中为必需

密码绝不能使用:MD5、SHA-1 或未加盐的 SHA-256。

验证过程

当用户登录时:

  1. 获取该用户已存储的哈希值和盐值
  2. 使用相同的盐值和算法对提交的密码进行哈希处理
  3. 将生成的哈希值与已存储的哈希值进行比较(使用恒定时间比较)
  4. 绝不解密——仅进行比较

快速检查:密码哈希

哪种密码哈希算法被认为是当前的最佳实践,并且曾在密码哈希竞赛中获胜?

课程回顾

密码必须以哈希值形式存储,而不是以明文形式存储。SHA-256 这类快速算法并不适合此用途——请使用缓慢的密码哈希函数:Argon2id(首选)、bcrypt 或 PBKDF2。始终为每个密码使用随机盐值,以防范彩虹表攻击。绝不要自行编写密码学算法——请使用经过验证的库。

常见问题解答

「密码哈希:bcrypt、Argon2、PBKDF2」课时是免费的吗?

是的 — 「密码哈希:bcrypt、Argon2、PBKDF2」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「密码哈希:bcrypt、Argon2、PBKDF2」这节课中我会学到什么?

了解明文存储为何危险,以及加盐哈希如何保护密码 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「密码哈希:bcrypt、Argon2、PBKDF2」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 密码强度与策略
  2. 密码哈希:bcrypt、Argon2、PBKDF2
  3. 多因素身份验证
  4. 凭据填充与密码喷洒
← 返回 Cyber Security Academy