1.背景
你知道你们生产环境数据库的用户名、密码么?
啥,你竟然知道?快来看看如何对其进行加密,防止密码泄漏。
2.Jasypt
The easiest way to use Jasypt is using its easy encryption tools, which are called the utils, because they live in the org.jasypt.util package.
They are called utils because they are ready-to-use, preconfigured digesters and encryptors you can use without knowing much about their configuration.
3.jasypt-spring-boot
Jasypt Spring Boot provides Encryption support for property sources in Spring Boot Applications.
4.简单版-快速使用
我们先来一个最简单版,体验一下效果。
1、添加 maven plugin
在我们要加密的配置文件所属的 module 的 pom.xml 中添加如下的 plugin
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.3</version>
</plugin>
2、修改配置文件中的待加密的字符串
对数据库的用户名、密码使用 DEC() 进行包裹
spring.datasource.username=DEC(root)
spring.datasource.password=DEC(admin)
3、执行 maven plugin 插件命令,对配置文件加密
切换到配置 plugin 的 module 目录下,执行下面的命令
mvn jasypt:encrypt -Djasypt.encryptor.password="the password"
成功后,我们可以看到,配置文件待加密项,变成了如下的样子,这次别人拿到你的代码,也不知道用户名、密码是什么了,大功告成。
spring.datasource.username=ENC(/xSAK8u53npb+F+hH+DpvcVzE0qm5ubh5BhLgqyWK1mFzSz1MVzKvu/NlEKGl/Iy)
spring.datasource.password=ENC(BHUN3TvKMaerfSOiFfCrxyGHAyYxB3qOzstn/eqaXA54WlYCairCTAjrY+68TA4w)
4、配置解密用的密码,启动项目
配置文件这个样子了,项目还能启动么?当然可以,但是我们要指定一下,密码,对就是在执行 maven plugin 时传入的那个。
--jasypt.encryptor.password="the password"
我是用 idea 测试,所以将参数填写在,Program arguablyments 内,如下图:
是不是很简单,想简单测试一下,源码地址在下面。
5、高级版-自定义加密算法
有的时候,默认的加密算法安全等级不合适,这个时候我们需要自定义加密算法,来,搞起来!
1、实现 StringEncryptor 接口加解密方法
注意添加注解 @Component,示例代码中的加密、解密为了演示效果,使用的是一个简单字符串替换。
@Component
public class MyStringEncryptor implements StringEncryptor {
@Override
public String encrypt(String s) {
switch (s) {
case "root":
return "root-en";
case "admin":
return "admin-en";
}
return null;
}
@Override
public String decrypt(String s) {
switch (s) {
case "root-en":
return "root";
case "admin-en":
return "admin";
}
return null;
}
}
2、修改配置文件,手动配置加密后的字符串
这个时候,不能使用插件命令去加密了,我们需要自己手动去加密,项目只负责解密
spring.datasource.username=ENC(root-en)
spring.datasource.password=ENC(admin-en)
3、指定我们的加解密类
jasypt.encryptor.bean=myStringEncryptor
4、启动项目
--jasypt.encryptor.password="the password"
6、实践代码
代码已经上传至 github,https://github.com/zmdstr/jasypt-demo