0Pricing
Cryptology Academy · 课时

bcrypt:算法与成本因子

了解 bcrypt 的内部机制、工作因子以及如何正确调整成本

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

欢迎

bcrypt 是一种专门设计为运行缓慢且抵抗硬件攻击的密码哈希算法,于 1999 年设计完成。它仍然是部署最广泛的密码哈希算法。

bcrypt 的起源

该算法由 Niels Provos 和 David Mazières 设计,基于 Blowfish 密码。名称中的“b”代表 Blowfish。它的关键思路是利用 Blowfish 昂贵的密钥设置过程来有意降低速度。

bcrypt 哈希格式

$2b$12$saltsaltsaltsaltsaltsalthashhashhashhashhashhashhash $2b$:算法版本 12:成本因子(迭代次数的 log2) salt:22 个 Base64 字符(16 字节) hash:31 个 Base64 字符(24 字节)

成本因子

成本 12 = 2^12 = 4096 次迭代。成本 13 = 8192 次迭代。每增加 1,计算时间就会加倍。请调整参数,使哈希过程在您的硬件上耗时约 100–300 毫秒。攻击者的速度也会按相同比例变化。

Python 中的 bcrypt

import bcrypt password = b'my_password' salt = bcrypt.gensalt(rounds=12) # 生成随机盐值 hashed = bcrypt.hashpw(password, salt) # 验证: bcrypt.checkpw(password, hashed) # True

内置盐值

bcrypt 始终会自动生成并存储盐值。gensalt() 会生成经过密码学保护的 16 字节随机盐值。您不需要单独管理盐值——它已经嵌入哈希字符串中。

bcrypt 的 72 字节限制

bcrypt 会在第 72 个字节处截断输入。长度超过 72 个字符的密码,在前 72 个字节之后的部分会被视为相同。解决方法:先使用 SHA-512 进行预哈希,再使用 bcrypt(但请验证此方案)。

密码验证流程

登录: 1. 用户提交密码 2. 从数据库中取出已存储的哈希值 3. bcrypt.checkpw(submitted, stored_hash) 4. checkpw 从已存储的哈希值中提取盐值并重新计算 5. 返回 True/False 切勿存储原始密码。

基准测试

bcrypt 成本因子为 12: - 消费级 CPU:每个哈希约 150ms - GPU(RTX 4090):约 50,000 个哈希/秒(SHA-256 为 10B 个/秒) 使用 bcrypt 成本因子 12 后,攻击者的优势从 10 亿倍降至约 300 倍。

成本因子建议

OWASP 2024:bcrypt 成本因子应 ≥ 10。建议使用 12。每年检查一次——随着硬件性能提升,应提高该因子。实现在线重新哈希:登录时检查哈希值,并在需要时升级。

bcrypt 的局限性

bcrypt 的弱点:它不是内存硬化算法。攻击者可以使用针对 bcrypt 优化的定制 ASIC。对于新应用,建议优先使用 Argon2id,因为它具备内存硬化特性并且能抵抗 ASIC。

快速检查

bcrypt 哈希中的成本因子 12 是什么意思?

回顾

bcrypt 很可靠,但不具备内存硬化特性。接下来我们学习 Argon2——这种现代密码哈希算法支持可配置的内存需求。

常见问题解答

「bcrypt:算法与成本因子」课时是免费的吗?

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

「bcrypt:算法与成本因子」这节课中我会学到什么?

了解 bcrypt 的内部机制、工作因子以及如何正确调整成本 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

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

「bcrypt:算法与成本因子」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 普通 SHA-256 为何不适合密码
  2. bcrypt:算法与成本因子
  3. Argon2:内存困难型密码哈希
  4. PBKDF2 与算法选择
← 返回 Cryptology Academy