springboot 项目对配置文件中的密码进行加密处理
目录
- 说明
- 步骤
- 导入依赖
- 导入加密解密工具类
- 获取密文
- 修改配置文件的内容
说明
spring boot 中的配置文件中往往以明文的方式存放一些账号密码,例如数据库连接密码、redis登录密码等。为了项目安全。我们需要将密码禁行加密处理,防止能直接看出明文的密码。
此处,加密配置文件中的数据库连接密码为案例。
步骤
导入依赖
在项目中引入以下依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
这个依赖和spring boot整合后,整个项目中系统属性、命令行参数、环境属性、配置文件、自定义属性 等内容都存在加密属性,可以使用此依赖对指定内容进行加密处理。
导入加密解密工具类
在项目中导入以下工具类
import org.jasypt.util.text.AES256TextEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;
import org.jasypt.util.text.StrongTextEncryptor;
public class JasyptUtil {
private static BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
private static AES256TextEncryptor aes256TextEncryptor = new AES256TextEncryptor();
private static StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor();
/**
* 说明:
* 加密,使用des对称加密算法进行加密
* @param data 需要加密的明文内容
* @param key des对称加密的密钥
* @return 返回加密后的密文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String encryptDES(String data, String key){
textEncryptor.setPassword(key);
return textEncryptor.encrypt(data);
}
/**
* 说明:
* 解密,使用des对称加密算法进行解密
* @param data 密文内容
* @param key 密钥
* @return 返回解密后的明文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String decryptDES(String data, String key){
textEncryptor.setPassword(key);
return textEncryptor.decrypt(data);
}
/**
* 说明:
* 加密,使用AES256加密算法进行加密
* @param data 需要加密的明文内容
* @param key 密钥
* @return 返回加密后的密文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String encryptAES256(String data, String key){
aes256TextEncryptor.setPassword(key);
return aes256TextEncryptor.encrypt(data);
}
/**
* 说明:
* 解密,使用AES256算法进行解密
* @param data 密文内容
* @param key 密钥
* @return 返回解密后的明文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String decryptAES256(String data, String key){
aes256TextEncryptor.setPassword(key);
return aes256TextEncryptor.decrypt(data);
}
/**
* 说明:
* 加密,使用3des对称加密算法进行加密
* @param data 需要加密的明文内容
* @param key des对称加密的密钥
* @return 返回加密后的密文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String encrypt3DES(String data, String key){
strongTextEncryptor.setPassword(key);
return strongTextEncryptor.encrypt(data);
}
/**
* 说明:
* 解密,使用3des对称加密算法进行解密
* @param data 密文内容
* @param key 密钥
* @return 返回解密后的明文字符串
* @author 张小三
* @create 2024-09-12 11:59
* @verson 1.0.0
*/
public static String decrypt3DES(String data, String key){
strongTextEncryptor.setPassword(key);
return strongTextEncryptor.decrypt(data);
}
/*
* 使用main方法来测试获取加解密后的数据
*/
public static void main(String[] args) {
// 例如:使用AES256的方式加解密
// 此处我要加密数据库登录密码:root@sdfa122
String pwd="root@sdfa122";
// 自定义密钥key为:62015ab9-7d67-44bc-b30f-0363e91c7127
String key = "62015ab9-7d67-44bc-b30f-0363e91c7127"
String str = encryptAES256(pwd, key);
System.out.println("加密结果:"+str);
String decStr = decryptAES256(str,key)
System.out.println("解密结果:"+decStr);
}
}
获取密文
使用以上的工具类来获取需要加密的数据密文。
例如,我要加密数据库连接密码。则需要修改上面工具类中的main方法中的内容。然后执行一次main方法后,复制打印的加密结果的密文。
修改配置文件的内容
未使用加密前的配置文件中的数据连接配置如下:
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.83.143:3306/zhangTest?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true
username: root
password: root
使用加密后修改的配置文件结果如下:
说明:
1. 下面的qOorwz6OoyZTtiBJzaEGnGzCMapZ4M8wxgamZdUkPre3fk0Dxy9zRopZNFJQso4F 密文为工具类中的main方法执行后的结果。
2. ENC(密文) :为使用jasypt的格式。将main方法中的结果复制到括号中即可。
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.83.143:3306/zhangTest?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true
username: root
password: ENC(qOorwz6OoyZTtiBJzaEGnGzCMapZ4M8wxgamZdUkPre3fk0Dxy9zRopZNFJQso4F)