SpringBoot集成 Jasypt 实现数据源连接信息进行加密

news/2024/11/22 10:31:31/

SpringBoot集成 Jasypt 实现数据源连接信息进行加密

在实际项目中,敏感信息(如数据库连接的 URL、用户名、密码等)直接暴露在配置文件中可能导致安全隐患。为了解决这一问题,可以使用 Jasypt 来加密敏感信息,并在运行时解密,从而有效提升安全性。

在这里插入图片描述


一、什么是 Jasypt

Jasypt(Java Simplified Encryption) 是一个开源的 Java 加密工具库,它支持对配置文件中的敏感数据进行加密和解密操作,特别适用于 Spring Boot 项目。


二、项目环境准备

1. 添加 Jasypt 依赖

pom.xml 中添加以下依赖,可在https://mvnrepository.com查看最新版本:

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version>
</dependency>
2. 数据库配置示例

application.yml 中定义数据库配置:

spring:datasource:url: ENC(U2FsdGVkX1+...)username: ENC(U2FsdGVkX1+...)password: ENC(U2FsdGVkX1+...)
jasypt:encryptor:# 加密的密钥,生成环境放到启动参数配置password: ${JASYPT_ENCRYPTOR_PASSWORD:默认秘钥}# 加密算法algorithm: PBEWithHMACSHA256AndAES_128iv-generator-classname: org.jasypt.iv.RandomIvGenerator# 算法识别的前后缀,默认ENC()property:prefix: "ENC("suffix: ")"

以上 ENC(...) 是加密后的密文,将在后续步骤中生成。


三、生成加密密文

Jasypt 提供多种工具生成加密密文,以下分别介绍两种方式:

方法 1:使用 Jasypt CLI 工具
  1. 下载 CLI 工具
    下载 jasypt-1.9.3-dist.zip,解压后进入jasypt-1.9.3-dist\jasypt-1.9.3\lib目录。

  2. 执行加密命令
    使用以下命令生成加密密文:

    java  -cp  jasypt-1.9.3.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="明文数据" password=加密密钥  algorithm=PBEWithHMACSHA256AndAES_128 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator
    

    示例输出

    ENC(U2FsdGVkX1+...)
    
  3. 解密验证

    java  -cp  jasypt-1.9.3.jar  org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="密文数据" password=加密秘钥  algorithm=PBEWithHMACSHA256AndAES_128 ivGeneratorClassName=org.jasypt.iv.RandomIvGenerator
    
方法 2:使用 Java 代码生成密文

编写以下代码:

java">public class JasyptEncryptorDemo {public static void main(String[] args) {PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();SimpleStringPBEConfig config = new SimpleStringPBEConfig();config.setPassword("加密秘钥");config.setAlgorithm("PBEWithHMACSHA256AndAES_128"); // 加密方式config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");encryptor.setConfig(config);System.out.println(encryptor.encrypt("明文数据")); // 加密System.out.println(encryptor.decrypt("密文数据")); // 解密}
}

执行后,控制台输出加密密文。


四、解密与运行验证

1. 配置 Jasypt 解密器

application.yml 中配置解密相关参数:

jasypt:encryptor:password: ${JASYPT_ENCRYPTOR_PASSWORD:secureKey123!}   # 环境变量优先algorithm: PBEWithHMACSHA512AndAES_256property:prefix: "ENC("suffix: ")"
2. 编写解密验证代码

创建一个测试控制器,验证加密后的配置是否能正确解密:

java">import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@Value("${spring.datasource.password}")private String password;@GetMapping("/test")public String testDecryption() {return "Decrypted password: " + password;}
}

运行项目,访问 /test,若解密成功,将返回明文密码。


五、常见加密算法

Jasypt 支持多种加密算法,以下是常见算法及其特点:

算法名称特点ivGeneratorClassName
PBEWithMD5AndDES基于 MD5 和 DES 的加密算法,安全性较低,不建议在生产环境使用。org.jasypt.iv.NoIvGenerator
PBEWithMD5AndTripleDES使用 MD5 生成密钥,Triple DES(3DES)进行加密;比单 DES 更安全,适合一般安全需求场景。org.jasypt.iv.NoIvGenerator
PBEWithHMACSHA256AndAES_128使用 SHA-256 和 AES-128,兼顾性能与安全性;性能和安全性平衡,适用大部分应用场景。org.jasypt.iv.RandomIvGenerator
PBEWithHMACSHA512AndAES_256高安全性算法,适用于需要高敏感数据保护的场景;(金融等)。org.jasypt.iv.RandomIvGenerator

六、安全注意事项

  1. 加密密钥管理

    • 加密密钥建议通过环境变量或密钥管理工具传递,避免硬编码在配置文件中。
    • 使用复杂的密钥,例如包含字母、数字和特殊字符的随机字符串。
  2. 生产环境建议

    • 数据库连接信息的加密仅是基础安全措施,建议结合防火墙、网络隔离等多层次保护。
    • 定期更换加密密钥,并重新加密敏感数据。
  3. 性能权衡

    • 高安全性算法如 PBEWithHMACSHA512AndAES_256 对性能要求更高,需根据实际情况选择合适的算法。

七、总结

通过集成 Jasypt,可以有效保护 Spring Boot 项目中的敏感信息,提升安全性。在实际使用中,可以结合其他安全措施(如环境变量、权限控制)进一步加强数据保护。


http://www.ppmy.cn/news/1549009.html

相关文章

【设计模式】如何用C++实现适配器模式

【设计模式】如何用C实现适配器模式 一、问题背景 用到过很多次适配器模式&#xff0c;一直不理解为什么用这种模式&#xff0c;好像这个模式天生就该如此使用。 实际上&#xff0c;我们很多的理念都源于一些简朴的思想&#xff0c;这些思想不一定高深&#xff0c;但是在保证…

面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案

引言&#xff1a; 随着科技的飞速发展&#xff0c;智能视觉IoT已成为科技领域的热门话题&#xff0c;为智能家居、智慧城市等领域带来新机遇。然而&#xff0c;物联网市场的碎片化特性对智能视觉芯片设计构成挑战。同时&#xff0c;汽车行业正经历技术驱动的变革&#xff0c;软…

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx&#xff0c;第一个就是官方镜像库&#xff0c;这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口&#xff0c;只要访问宿主机的9090端口&#…

uni-app 界面TabBar中间大图标设置的两种方法

一、前言 最近写基于uni-app 写app项目的时候&#xff0c;底部导航栏 中间有一个固定的大图标&#xff0c;并且没有激活状态。这里记录下实现方案。效果如下&#xff08;党组织这个图标&#xff09;&#xff1a; 方法一&#xff1a;midButton的使用 官方文档&#xff1a;ta…

开源Tacchi 视触觉传感器仿真器,为机器人与物体接触仿真提供高质量的Sim2Real性能!

Tacchi是一个基于Taichi编程语言开发的低计算成本弹性体形变仿真器&#xff0c;由方斌教授团队开发并已开源&#xff0c;为机器人与物体接触仿真提供高质量的Sim2Real性能&#xff01;该仿真器以较低的计算资源消耗来模拟弹性体的物理形变&#xff0c;并生成与真实触觉图像相似…

同态加密技术与应用场景

【1】应用场景 同态加密&#xff08;Homomorphic Encryption, HE&#xff09;是一种加密技术&#xff0c;它允许直接对加密数据进行特定的操作&#xff0c;而不需要先将数据解密。这种特性使得同态加密在保护数据隐私的同时&#xff0c;还能支持数据的处理和分析&#xff0c;因…

Sourcetree登录GitLab账号

1. 在GitLab上创建个人访问令牌 在gitlab中点击右上角的头像图标&#xff0c;选择设置进入 Access Tokens&#xff08;访问令牌&#xff09; 页面填写令牌名称和到期时间&#xff0c;指定Scopes&#xff08;范围&#xff09;。一般选择read_repository和api点击 Create person…

如何在 Microsoft Edge 中设置代理: 快速而简单的方法

你知道在 Microsoft Edge 中设置代理可以大大提升浏览体验吗&#xff1f;无论您是想提高隐私保护、访问受地理位置限制的内容&#xff0c;还是想更高效地浏览网页&#xff0c;代理服务器都能改变一切。 本指南将介绍如何在 Microsoft Edge 中设置代理&#xff0c;解决常见的代…