25.4.17学习总结

关于bcrypt算法

BCrypt 的主要特点和优点:

  • 加盐 (Salting): BCrypt 会自动为每个密码生成一个随机的盐值 (salt) 并将其与密码组合在一起,然后再进行哈希。 盐值是随机数据,用于防止彩虹表攻击。 这意味着即使两个用户使用相同的密码,他们的哈希值也会不同。

  • 慢哈希 (Slow Hashing): BCrypt 被设计成一个运算量大的哈希函数,需要更多的计算时间。 这种设计使得暴力破解(尝试所有可能的密码)变得非常耗时,从而提高了安全性。 这个 "慢" 是指相对于其他哈希算法,它是故意变慢的。

  • 自适应 (Adaptive): BCrypt 允许调整“成本因子”(也称为“轮数”)。 成本因子决定了哈希计算的复杂程度。 随着计算机硬件的改进,你可以增加成本因子以保持密码哈希的安全性。 成本因子越高,哈希计算所需的时间就越长,破解密码就越困难。

  • 单向性 (One-Way): BCrypt 是一种单向散列函数。这意味着从密码的哈希值反向推导出原始密码在计算上是不可行的。

工作原理:

  1. 生成盐值 (Salt): 当用户注册时,BCrypt 首先生成一个随机的盐值。

  2. 组合密码和盐值: BCrypt 将用户的密码与生成的盐值组合在一起。

  3. 哈希计算: BCrypt 对组合后的密码和盐值进行多次迭代的哈希运算,这个迭代次数由成本因子控制。

  4. 存储哈希值: 生成的哈希值(包含盐值信息)被存储在数据库中。

import org.mindrot.jbcrypt.BCrypt;

public class EncryptSensitiveData {//bcrypt算法
    private static final int BCRYPT_ROUNDS = 12;
    public static String hashData(String Data) {
        return BCrypt.hashpw(Data, BCrypt.gensalt(BCRYPT_ROUNDS));
    }
    public static boolean checkData(String Data, String hashedData) {
        return BCrypt.checkpw(Data, hashedData);
    }
}

你可能感兴趣的:(学习)