SpringBoot中集成jasypt-spring-boot实现配置文件数据加密脱敏

发布时间 2023-07-15 14:06:27作者: 霸道流氓

场景

经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url、用户名、

密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢。

除了使用手动将加密之后的配置写入到配置文件中,提取的时候再手动解密的方式,还可以使用如下

方式。

jasypt-spring-boot

https://github.com/ulisesbocchio/jasypt-spring-boot

https://gitee.com/mirrors/Jasypt-Spring-Boot_old1?_from=gitee_search

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、SpringBoot中添加项目依赖

        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

2、在配置文件yml中添加一个加密时的秘钥,可任意指定

jasypt:
  encryptor:
    password: badaodechengxvyuan

直接将秘钥放在配置文件中也是不安全,可以在项目启动的时候配置秘钥

java -jar xxx.jar -Djasypt.encryptor.password=badaodechengxvyuan

3、编写单元测试生成加密后的数据

为了将配置的明文数据进行加密,需要将数据进行加密

import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.Assert;

@SpringBootTest
class JasyptTest {
    /**
     * inject encryption method
     */
    @Autowired
    private StringEncryptor encryptor;

    /**
     * encrypt data
     */
    @Test
    void encrypt() {
        String name = encryptor.encrypt("root");
        String password = encryptor.encrypt("123456");
        System.out.println("name:"+name);
        System.out.println("password:"+password);
        Assert.isTrue(name.length()>0,"name encrypt success");
        Assert.isTrue(password.length()>0,"password encrypt success");
    }
}

这里为了演示只加密了用户名和密码,当然url或者其他需要加密的明文数据都可以。

运行单元测试会输出加密后的字符串数据

 

4、将加密后的数据复制到配置文件yml中对应的位置,并使用ENC()包裹。

# 数据源
spring:
  application:
    name: badao-tcp-demo
  datasource:
   url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: ENC(Ls/gHnNIUDGsGIRbk+KuKaa2E...)
    password: ENC(rCRmLz/Iiu4INB/3+YKVGxC...)

 

上面包裹的前缀和后缀也可通过配置进行更改,以及更多用法比如自己配置加密算法,

可参考官方文档。