SpringBoot实现数据源加密
1.为什么要进行数据源加密?
项目测试阶段,较为严苛的公司一般都需要进行数据源加密,特别是一些特殊部门的外包项目,测试文档中对数据源加密的测试流程很严格,不然会在项目被反编译时暴露数据源信息。
2.如何进行数据源加密?
2.1 使用jasypt
实现数据源加密的方式有很多,以jasypt为例
2.1.1 引入jar
我们创建一个工程,引入jar信息:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2.1.2 配置加密信息
以SpringBoot工程为例,在yml或properties配置文件中配置如下信息:
# 数据源加密
jasypt:
encryptor:
password: ${PASSWORD}
algorithm: PBEWithHMACSHA512AndAES_256
2.1.3 编写测试类
/**
* @author CH_ywx
* @version 1.0
* @create 2024/6/9
* <p></p>
*/
@SpringBootTest
public class TestDBAuth {
@Test
public void test(){
// PBEWithHMACSHA512AndAES_256加密方式,看配置文件
AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
textEncryptor.setPassword("ADMIN"); //参数为加盐的值
String myEncryptedText = textEncryptor.encrypt("Xccit.1209"); //参数为真实密码
//加密后的结果
System.out.println(myEncryptedText);
String plainText = textEncryptor.decrypt(myEncryptedText);
//解密后的结果
System.out.println(plainText);
}
}
如图,看到输出结果是这样就对了
2.1.4 重新配置数据源
将加密后的结果按如图配置: SpringBoot在启动的时候会根据ENC()来判断是否有加密,如果有会根据配置的盐和算法进行解码。
2.1.5 启动时加上环境变量
这里在测试阶段可以使用IDEA加环境变量的方式启动 PASSWORD: jasypt配置中的key ADMIN:测试类中加盐字段的值,必须保持一致,不然数据源密码会解密失败
打成jar包后可以使用命令行参数启动:
java -jar xxx.jar PASSWORD=ADMIN
3.看一下效果
正常启动,无报错,如果对数据库操作报密码错误,请检查盐值。