1. 什么是 jasypt
Jasypt 是一个 Java 库,它允许开发人员以最少的努力为他/她的项目添加基本的加密功能,而无需深入了解密码学的工作原理
- 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件
- 适合集成到基于 Spring 的应用程序中
- 用于加密应用程序(即数据源)配置的集成功能
2. 使用
2.1 添加依赖
<!-- 场景启动器不用使用 @EnableEncryptableProperties 注解来开启功能 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2.2 加密
// 自己写一个加密工具类
// 记下密钥、密文,使用完工具类则立马删除该工具类
public class jasyptUtil {
// 密钥
private static final String SECRET_KEY = "YOUR_SECRET_KEY";
// 加密
private static void encrypt() {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(SECRET_KEY);
System.out.println("username: " + encryptor.encrypt("root"));
System.out.println("password: " + encryptor.encrypt("root123"));
}
// 解密
private static void decrypt() {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(SECRET_KEY);
System.out.println("username: " + encryptor.decrypt("3qsdf546UQo3WW/NW/CK1w=="));
System.out.println("password: " + encryptor.decrypt("6qaHPn50ajUQo3/NW/TN1w=="));
}
// 每次加密输出都不一样,因有随机数的参与,但是能解密出相同的数据
public static void main(String[] args) {
// 3qsdf546UQo3WW/NW/CK1w==
// 6qaHPn50ajUQo3/NW/TN1w==
encrypt();
// root
// root123
decrypt();
}
}
2.3 使用
# 将配置文件中的明文敏感数据用 ENC(密文) 替换
spring:
datasource:
username: ENC(3qsdf546UQo3WW/NW/CK1w==)
password: ENC(6qaHPn50ajUQo3/NW/TN1w==)
2.4 cmd命令获取加密密文,找到jasypt-1.9.3.jar文件所在位置
2.5 yml文件配置
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="原密码" password=密钥 algorithm=PBEWithMD5AndDES