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);
    }
}

image.png 如图,看到输出结果是这样就对了

2.1.4 重新配置数据源

将加密后的结果按如图配置: image.png SpringBoot在启动的时候会根据ENC()来判断是否有加密,如果有会根据配置的盐和算法进行解码。

2.1.5 启动时加上环境变量

这里在测试阶段可以使用IDEA加环境变量的方式启动 image.png PASSWORD: jasypt配置中的key ADMIN:测试类中加盐字段的值,必须保持一致,不然数据源密码会解密失败

打成jar包后可以使用命令行参数启动:

java -jar xxx.jar PASSWORD=ADMIN

3.看一下效果

image.png

正常启动,无报错,如果对数据库操作报密码错误,请检查盐值。