目录
2、在 application.yml 中添加jasypt敏感信息加密配置
3、加密数据 这里给大家提供一个加密配置工具类,方法里可以测试和输出加密结果,拿到加密的结果替换配置文件中需要加密的数据即可
4、加密的后的密文替换原始配置文件中的密码,使用 "ENC()" 标记
介绍
目的:
为了保护敏感的数据库配置信息(如数据库用户名和密码),通常可以将它们加密后再储存在项目的配置文件中,以增加应用程序的安全性。
Java Jasypt(Java Simplified Encryption)是一个Java加密库,用于易于使用的加密和解密文本、二进制数据和密码。它提供了简单、安全、灵活的加密技术,包括基于口令的、密钥的、哈希的和混淆的加密。
方法
Spring Boot 提供了多种方式来实现配置文件加密,其中常见的方法包括:
- 使用 Jasypt 加密
Jasypt 是一个 Java 加密库,支持将配置文件中的敏感信息进行加密和解密。
- 使用 Spring Cloud Config Server 安全加密
Spring Cloud Config Server 是一个分布式配置管理组件,可以让您将项目的配置文件集中管理,并实现配置的动态刷新和加密。
与 Jasypt 相比,使用 Spring Cloud Config Server 实现配置文件加密通常需要注册一个 Config Server 并配置相关的加密插件。具体的步骤可以参考 Spring 官方文档进行查看。
无论使用哪种方式进行配置文件加密,您都需要确保密钥的安全,避免被泄露或篡改。通常建议将密钥存储在安全的地方,并加强密码策略以避免敏感信息泄露的风险。
快速开始
这里讲述第一种加密方式,在 Spring Boot 项目中使用 Jasypt 加密可以分为两个步骤:
1、导入 Jasypt 相关依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
2、在 application.yml 中添加jasypt敏感信息加密配置
# jasypt 密码加密配置
jasypt:
encryptor:
# 加密盐值
password: TLjas3.0.4
# 加密算法设置 3.0.0 以后
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
3、加密数据 这里给大家提供一个加密配置工具类,方法里可以测试和输出加密结果,拿到加密的结果替换配置文件中需要加密的数据即可
package com.web.controller.tool;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JasyptUtil {
private static final Logger log = LoggerFactory.getLogger(JasyptUtil.class);
/**
* Jasypt生成加密结果
* @param password 配置文件中设定的加密盐值
* @param value 加密值
* @return
*/
public static String encyptPwd(String password,String value){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor(password));
String result = encryptor.encrypt(value);
return result;
}
/**
* 解密
* @param password 配置文件中设定的加密盐值
* @param value 解密密文
* @return
*/
public static String decyptPwd(String password,String value){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor(password));
String result = encryptor.decrypt(value);
return result;
}
public static SimpleStringPBEConfig cryptor(String password){
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
return config;
}
public static void main(String[] args) {
String encPwd = "Z34lT7GgZnfgdloDj7TVo7Xd4sB7pJzy";
// 加密
encPwd = encyptPwd("TLjas3.0.4", "需要加密密码填这里");// Xhw123.123.# QWVwAvPBsRCVlf5X7SC2xg==
// 解密
String decPwd = decyptPwd("TLjas3.0.4", encPwd);
log.info(encPwd);
log.info(decPwd);
}
}
4、加密的后的密文替换原始配置文件中的密码,使用 "ENC()" 标记
5、开启配置文件加密
到这里运行程序就可以了。
如何获取配置文件中的数据:
在配置文件中写密文,程序启动后会自动解密,我们使用正常的@Value方式获取的数据即为解密后的数据。
config.name=My Config
config.version=1.0.0
config.password=ENC(V+sgI2xsjCIh2gHs15jN8CyAwGzpwr6k)
读取Config.password配置项的值:
@Value("${config.password}")
private String configPassword;