SpringBoot项目配置加密

SpringBoot配置默认情况下是明文显示,安全性就比较低一些。jasypt该插件可以对配置文件进行加密, 提高配置的安全性

插件引入

1
2
3
4
5
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

组件说明

使用组件原生API进行加解密,说明: 每次编码生成的编码结果串都会不一样, 均可以逆向解析.

编解码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 编码
* @param keyt 秘钥
* @param source 原始数据
* @return 这里每次加密后的密文结果都不一样
*/
public static String encrypt(String keyt, String source){
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(keyt);
// 默认算法为"PBEWithMD5AndDES"
encryptor.setAlgorithm("PBEWithMD5AndDES");
return encryptor.encrypt(source);
}

/**
* 解码
* @param keyt 秘钥
* @param source ji
* @return
*/
public static String decrypt(String keyt, String source){
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(keyt);
// 默认算法为"PBEWithMD5AndDES"
encryptor.setAlgorithm("PBEWithMD5AndDES");
return encryptor.decrypt(source);
}

测试编解码

1
2
3
4
5
6
7
public static void main(String[] args) {
// 秘钥
String kept = "123456A";
String source = "配置加解密";
String target = encrypt(kept, source);
System.out.println("目标数据:" + source + " \n加密结果:" + target + " \n解密结果:" + decrypt(kept, target));
}

输出结果

1
2
3
目标数据:配置加解密 
加密结果:5eZ9Jf/7A75hdoVMhuqcufSFKE/GiVyp
解密结果:配置加解密

SpringBoot中应用

引入插件依赖, 然后在配置文件中做如下简易配置.

密钥配置

配置秘钥,该步必须配置,该密钥用来对配置文件进行加解密, 对应上述示例中的kept(密钥参数)

1
2
# 加密密码
jasypt.encryptor.password=1234ABCD

密文串配置

jasypt是通过识别配置文件中的ENC()标签来进行密文解密的,所以我们需要将受保护的配置做如下配置修改.

1
2
3
4
# 使用ENC()标签配置密文串
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ENC(9JXD/P35350dt+R3479d6uZQ==)?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=ENC(t+xp3NnBBFmcAePD459==)
spring.datasource.password=ENC(A0nQxK1oPaNnBBBFmcgoTI+FFnNnBB+sdEQmUg=)