Java 实现 bcrypt 加密
Java 实现 bcrypt 加密
简介
bcrypt是一个跨平台的文件加密工具,它使用了由 OpenBSD 项目开发的 Blowfish 对称密钥块密码的变种来加密数据。然而,在编程和加密库的上下文中,当我们提到 bcrypt 时,我们通常是指一个特定于密码哈希的库,它使用了一种基于 Blowfish 密码的适应性哈希算法。
引入依赖
Maven
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
Gradle
dependencies {
implementation 'org.mindrot:jbcrypt:0.4' // 密码加密
}
加密案例
import org.mindrot.jbcrypt.BCrypt;
/**
* @author Jing61
*/
public class PasswordEncryption {
public static void main(String[] args) {
// 原始密码
String password = "Jing";
// 使用BCrypt哈希密码
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt());
// 打印加密后的密码
System.out.println(hashedPassword);
}
}
BCrypt.gensalt()方法生成一个随机的盐值,而BCrypt.hashpw(password, salt)方法则使用这个盐值和原始密码来生成哈希。
解密案例
import org.mindrot.jbcrypt.BCrypt;
/**
* @author Jing61
*/
public class PasswordVerification {
public static void main(String[] args) {
// 假设这是从数据库存储的哈希值
String databasePassword = "$2a$10$nGnFg7u4d4SWOuJcKwD6LuRDu4C/gwVByNbVRRP/l7XK1I.cz9X7u";
// 用户输入的密码
String password = "Jing";
// 对比判断是否正确
if(BCrypt.checkpw(password, databasePassword))
System.out.println("正确");
else
System.out.println("错误");
}
}
技术原理
Bcrypt 是一种密码哈希算法,而非对称或分组加密算法。BCrypt 基于 Blowfish 对称分组密码变形而来,专用于密码存储。
BCrypt 的核心机制是:对用户密码进行加盐(salt)后,再进行多次哈希迭代,从而生成最终密文。其“工作因子”(cost factor)可配置,决定了迭代次数,计算成本随因子指数级增长。
BCrypt 每次哈希时会自动生成一个随机盐,并将盐值嵌入到最终密文中,验证时从密文提取盐,与用户输入重新哈希比对。

浙公网安备 33010602011771号