bcrypt算法

  • bcrypt是一种专门为密码存储设计的哈希函数,基于Blowfish加密算法。

  • 它的主要特点是:
    • 加盐(Salting)
      • bcrypt在哈希过程中引入一个随机生成的盐值,与密码一起进行哈希处理

      • 即使两个用户使用相同的密码,生成的哈希值也会不同,从而防止了彩虹表攻击。

    • 自适应性(Adaptiveness)
      • bcrypt允许通过调整迭代次数(cost factor)来控制哈希计算的复杂度。

      • 随着计算能力的提升,可以增加迭代次数,使得哈希过程变得更加缓慢,从而增强安全性。

基本

应用场景

  • bcrypt广泛应用于需要存储和验证密码的场景,如Web应用程序、数据库和身份验证系统。

  • 由于其高安全性,许多操作系统和Linux发行版(如OpenBSD和SUSE Linux)将bcrypt作为默认的密码哈希算法。

优点

  • 高安全性: 通过加盐和自适应性,bcrypt有效防止了彩虹表和暴力破解攻击。

  • 可调节性: 可以根据需要调整迭代次数,以平衡安全性和性能。

  • 广泛支持: 在多种编程语言中都有实现,如C、C++、Java、Python等。

缺点

  • 性能开销: 由于多次迭代,bcrypt的哈希过程相对较慢,可能影响系统性能。

  • 内存消耗: bcrypt需要一定的内存来存储盐值和中间结果,可能对资源有限的环境造成挑战。

核心说明

  • 存储格式
    • 格式: {编码类型}格式化工作因子+固定长度随机盐值+编码密钥

    • 示例: {bcrypt}$2a$10$f28x4Dw4YQ.CmGPTaVB86.uMIHe1XEgCwv6XH19xqP1lg031gz6.6

    • 解释:
      • {bcrypt}: bcrypt算法

      • $2a$10$: 工作因子。决定了哈希计算的复杂度,数值越大,计算所需时间越长,从而提高安全性

      • f28x4Dw4YQ.CmGPTaVB86.uMIHe1X: 随机盐值。一个随机生成的字符串,用于防止彩虹表攻击

      • EgCwv6XHI9xqP1lgO31gz6.6:编码密钥。实际的密码哈希结果。

  • 编码逻辑
    • 指定编码算法类型和工作因子:选择bcrypt作为编码算法,并设定工作因子(如10),这将影响哈希计算的迭代次数

    • 生成固定长度随机盐值:创建一个随机的、固定长度的盐值,以增强密码的安全性

    • 编码明文密码:使用bcrypt算法、工作因子和盐值对原始密码进行哈希处理

    • 组装最终编码密码串:将上述三部分组合成一个完整的哈希字符串,用于存储

  • 验证逻辑(当需要验证用户输入的密码时):
    • 解析编码算法类型:从存储的哈希字符串中识别出使用的算法(如bcrypt)

    • 解析工作因子和随机盐值:从哈希字符串中提取出之前设置的工作因子和盐值

    • 使用相同算法对明文密码进行编码:用相同的bcrypt算法、工作因子和盐值对用户输入的明文密码进行哈希处理

    • 对比编码密码串是否相等:将新生成的哈希值与存储的哈希值进行比较,如果两者相同,则说明密码正确