JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

 更新时间:2025年11月25日 11:59:53   作者:百***2634  
文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥、加密敏感数据、自定义加密配置以及加密与解密的示例,通过这些步骤,开发者可以轻松地保护应用程序中的敏感信息,感兴趣的朋友跟随小编一起看看吧

JAVA (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程

在开发过程中,我们经常需要处理敏感数据,如数据库密码、API 密钥等。为了确保这些数据的安全性,我们可以使用加密技术来保护它们不被泄露。Jasypt(Java Simplified Encryption)是一个简单易用的加密库,非常适合用来保护配置文件中的敏感数据。本文将详细介绍如何在 Spring Boot 项目中集成 Jasypt,并展示加密、解密的实际使用方式。

一、Jasypt 简介

Jasypt 是 Java 平台的简化加密工具,支持对文本和数据进行加密和解密,尤其适合应用于 Spring Boot 项目的配置文件加密。其主要特点包括:

  • 简单易用的 API
  • 支持对属性文件内容加密
  • 支持常见的加密算法
  • 与 Spring Boot 的无缝集成

二、在 Spring Boot 中集成 Jasypt

1. 添加 Jasypt 依赖

pom.xml 文件中添加 Jasypt 依赖:

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version> <!-- 请根据需要更新到最新版本 -->
</dependency>

如果使用的是 Gradle,则添加如下依赖:

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'

2. 配置加密密钥

为了加密和解密数据,Jasypt 需要一个密钥(secret key)。你可以将这个密钥配置在 Spring Boot 的 application.propertiesapplication.yml 文件中:

  • application.properties 配置:
    • jasypt.encryptor.password=mysecretkey
  • application.yml 配置:
    • jasypt:
    • encryptor:
    • password: mysecretkey

注意mysecretkey 是你用于加密和解密的密钥,请确保密钥的安全性,避免公开泄露。可以通过环境变量或其他安全手段来管理该密钥。

3. 加密敏感数据

假设我们需要对数据库密码进行加密,首先,我们需要生成加密后的密码。

3.1 使用 Jasypt 命令行工具加密

Jasypt 提供了命令行工具来加密数据,执行以下命令加密数据库密码:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your_password" password="mysecretkey" algorithm=PBEWithMD5AndDES

其中:

  • input 是要加密的文本(例如数据库密码)
  • password 是加密密钥(与我们在配置文件中设置的 mysecretkey 一致)
  • algorithm 是加密算法,这里使用 PBEWithMD5AndDES

执行后,将得到类似以下的加密文本输出:

5MG1sSxAx+EeJsBdmcVdKg==

3.2 将加密后的密码写入配置文件

加密后的密码需要在配置文件中使用 ENC() 包裹。例如,假设加密的是数据库密码:

  • application.properties
    • spring.datasource.password=ENC(5MG1sSxAx+EeJsBdmcVdKg==)
  • application.yml
    • spring:
    • datasource:
    • password: ENC(5MG1sSxAx+EeJsBdmcVdKg==)

Jasypt 会在应用启动时自动解密使用 ENC() 包裹的加密值。

4. 启动应用并解密数据

当 Spring Boot 项目启动时,Jasypt 会自动识别 ENC() 包裹的加密内容,并使用密钥进行解密,无需额外的代码逻辑。这意味着在运行时,应用能够使用解密后的值。

三、自定义 Jasypt 加密配置

Jasypt 支持多种加密算法和配置项。如果你需要使用不同的加密算法、密钥生成方式等,可以通过 Java 配置进行自定义。

1. 自定义加密器配置

通过自定义 StringEncryptor,我们可以配置加密算法、密钥迭代次数等:

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JasyptConfig {
    @Bean
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        // 配置加密密钥,务必保密
        config.setPassword("mysecretkey");
        // 设置加密算法
        config.setAlgorithm("PBEWithMD5AndDES");
        // 设置密钥迭代次数,影响破解难度
        config.setKeyObtentionIterations("1000");
        // 设置加密池的大小,1 表示单个实例使用
        config.setPoolSize("1");
        // 盐生成器类,防止彩虹表攻击
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        // 设置输出编码类型为 base64
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

2. 参数说明:

  • Password: 加密和解密时使用的密钥。应与配置文件中的 jasypt.encryptor.password 保持一致。
  • Algorithm: 加密算法。可以选择 PBEWithMD5AndDESPBEWithSHA1AndDESede 等。
  • KeyObtentionIterations: 密钥生成的迭代次数,值越高,破解难度越大。
  • SaltGeneratorClassName: 盐生成器,防止使用预计算好的哈希表(彩虹表)破解。
  • StringOutputType: 设置输出的编码方式。通常使用 base64hexadecimal

四、加密与解密的详细示例

以下是一个详细的加密与解密的单元测试示例,用于测试自定义加密器的加密和解密功能。

import org.jasypt.util.text.BasicTextEncryptor;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class JasyptEncryptionTest {
    @Test
    public void testEncryptionDecryption() {
        // 创建 BasicTextEncryptor 对象进行简单的加密解密操作
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        // 设置加密密钥,与应用程序中使用的密钥一致
        encryptor.setPassword("mysecretkey");
        // 待加密的敏感数据
        String originalText = "mySensitiveData";
        // 使用 encrypt() 方法对文本进行加密
        String encryptedText = encryptor.encrypt(originalText);
        System.out.println("加密后的文本: " + encryptedText);
        // 使用 decrypt() 方法解密文本
        String decryptedText = encryptor.decrypt(encryptedText);
        System.out.println("解密后的文本: " + decryptedText);
        // 确保解密后的文本与原始文本一致
        assertEquals(originalText, decryptedText);
    }
}

详细注释:

  1. BasicTextEncryptor: Jasypt 提供的简易加密类,用于文本加密和解密。
  2. encrypt(): 加密方法,将明文转换为加密后的文本。
  3. decrypt(): 解密方法,将加密后的文本还原为明文。
  4. assertEquals(): 测试框架中的断言方法,用于验证加密和解密是否正确。

测试输出:

加密后的文本: yxKTmDKoxkOTxF5GyqaDLw==
解密后的文本: mySensitiveData

测试通过则说明加密与解密功能正常。

五、总结

通过本文的详细步骤,我们了解了如何在 Spring Boot 项目中集成 Jasypt 进行加密和解密。Jasypt 可以通过简单的配置将敏感数据加密保存,从而提高应用程序的安全性。

集成步骤总结:

  1. 引入 Jasypt 依赖。
  2. 配置加密密钥。
  3. 对敏感数据进行加密,并在配置文件中使用 ENC() 包裹加密值。
  4. Spring Boot 自动解密 ENC() 包裹的值。
  5. 可根据需求自定义加密器,选择适合的加密算法和配置。

通过这种方式,我们可以在不修改代码的情况下轻松保护应用程序的敏感信息。

参考文档:

到此这篇关于JAVA SpringBoot集成Jasypt进行加密、解密的详细过程的文章就介绍到这了,更多相关java jasypt加密解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java网络编程:Socket套接字、TCP和UDP协议以及Java高性能实战

    Java网络编程:Socket套接字、TCP和UDP协议以及Java高性能实战

    本文介绍了网络编程的基础知识,包括Socket套接字、TCP和UDP协议的区别以及如何使用Java实现网络服务器,通过实战代码,展示了如何从单线程到高性能线程池模型构建网络服务器,并探讨了常见的网络编程问题和解决方法
    2026-02-02
  • springboot封装JsonUtil,CookieUtil工具类代码实例

    springboot封装JsonUtil,CookieUtil工具类代码实例

    这篇文章主要介绍了springboot封装JsonUtil,CookieUtil工具类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • MyBatis中动态SQL的使用指南

    MyBatis中动态SQL的使用指南

    MyBatis 是一个流行的持久层框架,它通过 XML 或注解将接口方法与 SQL 映射在一起,动态 SQL 是 MyBatis 的一大特性,它使得构建灵活的查询变得简单,本文将通过一个 User 表的示例,介绍 MyBatis 中常用的动态 SQL 方法,需要的朋友可以参考下
    2024-09-09
  • java八大经典书籍 你看过几本?

    java八大经典书籍 你看过几本?

    java八大经典书籍,你看过几本?本文为大家分享了java学习书单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Mybatis Trim标签用法简单介绍

    Mybatis Trim标签用法简单介绍

    这篇文章主要介绍了Mybatis Trim标签用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • SpringAop切入点execution表达式的深入讲解

    SpringAop切入点execution表达式的深入讲解

    Spring AOP 可能会经常使用 execution切入点指示符,下面这篇文章主要给大家介绍了关于SpringAop切入点execution表达式的相关资料,需要的朋友可以参考下
    2021-08-08
  • java冒泡排序和快速排序代码

    java冒泡排序和快速排序代码

    本文主要介绍了java冒泡排序和快速排序的实例代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • springboot 集成activemq项目配置方法

    springboot 集成activemq项目配置方法

    这篇文章主要介绍了springboot 集成activemq项目配置方法,e-car项目配置通过引入activemq依赖,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 详解Java中的敏感信息处理

    详解Java中的敏感信息处理

    平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助
    2025-01-01
  • Java程序死锁问题定位与解决方法

    Java程序死锁问题定位与解决方法

    死锁是一种特定的程序状态,主要是由于循环依赖导致彼此一直处于等待中,而使得程序陷入僵局,相当尴尬,死锁不仅仅发生在线程之间,而对于资源独占的进程之间同样可能出现死锁,本文给大家介绍了Java程序死锁问题定位与解决方法,需要的朋友可以参考下
    2024-11-11

最新评论