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 每次哈希时会自动生成一个随机盐,并将盐值嵌入到最终密文中,验证时从密文提取盐,与用户输入重新哈希比对。

posted @ 2025-12-15 13:33  Jing61  阅读(3)  评论(0)    收藏  举报