25.4.17学习总结
关于bcrypt算法
BCrypt 的主要特点和优点:
-
加盐 (Salting): BCrypt 会自动为每个密码生成一个随机的盐值 (salt) 并将其与密码组合在一起,然后再进行哈希。 盐值是随机数据,用于防止彩虹表攻击。 这意味着即使两个用户使用相同的密码,他们的哈希值也会不同。
-
慢哈希 (Slow Hashing): BCrypt 被设计成一个运算量大的哈希函数,需要更多的计算时间。 这种设计使得暴力破解(尝试所有可能的密码)变得非常耗时,从而提高了安全性。 这个 "慢" 是指相对于其他哈希算法,它是故意变慢的。
-
自适应 (Adaptive): BCrypt 允许调整“成本因子”(也称为“轮数”)。 成本因子决定了哈希计算的复杂程度。 随着计算机硬件的改进,你可以增加成本因子以保持密码哈希的安全性。 成本因子越高,哈希计算所需的时间就越长,破解密码就越困难。
-
单向性 (One-Way): BCrypt 是一种单向散列函数。这意味着从密码的哈希值反向推导出原始密码在计算上是不可行的。
工作原理:
-
生成盐值 (Salt): 当用户注册时,BCrypt 首先生成一个随机的盐值。
-
组合密码和盐值: BCrypt 将用户的密码与生成的盐值组合在一起。
-
哈希计算: BCrypt 对组合后的密码和盐值进行多次迭代的哈希运算,这个迭代次数由成本因子控制。
-
存储哈希值: 生成的哈希值(包含盐值信息)被存储在数据库中。
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);}
}