Contents

Springboot 配置文件以及敏感信息脱敏

Contents

一个项目的配置文件往往保存了许多账号密码之类的重要信息,明文是非常不安全的,那么进行脱敏处理就很有必要了,下面看看如何操作吧~

首先介绍一下主角:Jasypt

这个开源工具提供了相当丰富的加密方式,具体可以参考其文档。

首先引入相关依赖:

 <!--配置文件加密-->
 <dependency>
     <groupId>com.github.ulisesbocchio</groupId>
     <artifactId>jasypt-spring-boot-starter</artifactId>
     <version>3.0.5</version>
 </dependency>

然后创建加密解密工具类:

public class JasyptUtil {
    // 盐:随机输入即可
    private static final String SALT = "SALT_CODE";

    // 加密
    private static void encrypt() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(SALT);
        System.out.println("username: " + encryptor.encrypt("root"));
        System.out.println("password: " + encryptor.encrypt("123456"));
    }

    // 解密
    private static void decrypt() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(SALT);
        System.out.println("username: " + encryptor.decrypt("w1tz6At82gnb4n6BZmgkaQ=="));
        System.out.println("password: " + encryptor.decrypt("UjPD7C8JowwL7vLL80iSdA=="));
    }

    // 根据你输入的盐值计算出来加密的结果
    public static void main(String[] args) {
        // w1tz6At82gnb4n6BZmgkaQ==
        // UjPD7C8JowwL7vLL80iSdA==
        encrypt();

        // root
        // 123456
        decrypt();
    }
}

注意:当生成了目标密码之后,最好清除盐值,避免泄露

配置文件中替换加密后的账号密码:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.0.1.161:3306/test_db?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
    # 生成的加密账号密码,需要用 ENC() 包裹,如下
    username: ENC(w1tz6At82gnb4n6BZmgkaQ==)
    password: ENC(UjPD7C8JowwL7vLL80iSdA==)

最后,添加本地参数:jasypt.encryptor.password=SALT_CODE,重启项目能正常连接说明就成功了。