一、前言
在我们配置文件中,经常有一些敏感的数据,比如数据源的用户名、密码、连接地址等,如果一旦这些数据泄露,那么将导致我们的数据源暴露,为了避免这一种情况发生,可以将这些敏感信息进行加密处理。
二、实现
1、引入以下依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
版本根据自身需求选择
2、配置加密密钥
有以下两种方式可供选择:
方式一:在配置文件中配置加密密钥
jasypt:
encryptor:
password: SFJLXIRGRHHET
方式二:在项目启动时配置加密密钥
java -jar demo.jar -Djasypt.encryptor.password= SFJLXIRGRHHET
建议使用方式二来进行配置加密密钥,因为加密密钥存放在配置文件中是不安全的,一旦配置文件泄露,所有加密的数据等同于没有加密。在项目启动时配置加密密钥,即使配置文件泄露,也不会造成多大的影响,除非同时得到启动时配置的加密密钥。
3、加密配置文件信息
首先,对需要加密的信息进行加密
@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptTest {
@Autowired
private StringEncryptor stringEncryptor;
@Test
public void test(){
String url = stringEncryptor.encrypt("jdbc\\:mysql\\://127.0.0.1\\:3306/test?useUnicode\\=true&characterEncoding\\=UTF-8&zeroDateTimeBehavior\\=convertToNull&useSSL\\=false&allowMultiQueries\\=true&serverTimezone=Asia/Shanghai");
String password = stringEncryptor.encrypt("root");
String username = stringEncryptor.encrypt("root");
System.out.println("url:" + url);
System.out.println("password:" + password);
System.out.println("username: " + username);
}
}
接下来,获取到加密后的url、password、username,在配置文件中进行配置,使用ENC()将加密后的字符串包住
data:
url: ENC(wRmYMwEop6JEbMr9zem6KWoVCnvjmOUWVnYbLnC8EXUzTbWzlIiQXlZRsHoRe2wdbqFW6qcJ6ruODSBchWvYK+wzqXPmJyjGUi8ggXKSSJiF3H1K9WtliPxf3ns6zj1yUToYSMZg4Hqf47iXMBGZmWySkPDPKhxM+MjCSxO4DhfKKPq7jHW6bIaqFm2VdoThF5nZXAT7FZZ5Egh+PGAxdnlFbeilCTHyzwEUsS80TS7j3wPFMjF/krataPPgp/KPSftXw6l0cJ2q8tnXkgKuYZ+Nmw8QbsuEApgYARooYic=)
username: ENC(KFIkzv1QV0oaYMzgHjlefmzbonWZMVA9vzBEx6TnlHGAGO1AolOKQD/FrTegZoqf)
password: ENC(t2L79RtORPH1UcE9R1g5OYLN9zDVvo9VLNPQmx5cD50AzDxNT2zIdGRGxhW8PgxL)
以上就完成了信息的加密与配置,接下来需要验证是否能够将加密后的信息装换成加密前的信息,直接将配置注入,输出查看是否能够顾正常解密
@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptTest {
@Value("${data.url}")
private String url;
@Value("${data.username}")
private String username;
@Value("${data.password}")
private String password;
@Test
public void test2(){
System.out.println(url);
System.out.println(username);
System.out.println(password);
}
}
发现能够输入解密之后的信息,以上关于配置文件的加密解密验证就到此结束
三、总结
以上简单讲述配置文件的基本加密使用过程,还有更多有关jasypt的高级用法,请查看官方文档