记录:425
场景:在在Spring Boot微服务中,使用jasypt-spring-boot-3.0.5的3种算法加解密yml配置文件内容。
版本:JDK 1.8,Spring Boot 2.6.3,jasypt-1.9.3,jasypt-spring-boot-3.0.5。
开源地址:https://github.com/ulisesbocchio/jasypt-spring-boot
1.在pom.xml引入依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
解析:引入jasypt-spring-boot-starter后,jasypt-1.9.3等相关依赖会被自动引入。
2.在yml文件中
jasypt-spring-boot-3.0.5的3种算法在yml配置文件指定,实际按需选择。
2.1使用PBEWithHMACSHA512AndAES_256算法
加密类: AES256TextEncryptor, 加密算法: PBEWithHMACSHA512AndAES_256。
jasypt-spring-boot-3.0.5默认就是使用PBEWithHMACSHA512AndAES_256,因此无需指定。
jasypt:
encryptor:
password: U3buwRJdQ2023
hub:
example:
password: ENC(C7KjxXpxXC/a/q1R8yCB+xkRIiHnDrDsmB8mEg3AWTvDNCf3nKiV09oZwHIS3SY9Sw1p3JfY3Ed7aWFEnVZ0rg==)
2.2使用PBEWithMD5AndDES算法
加密类: BasicTextEncryptor, 加密算法: PBEWithMD5AndDES。
在yml中指定算法PBEWithMD5AndDES。
jasypt:
encryptor:
password: U3buwRJdQ2023
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
hub:
example:
password: ENC(/BxyrksOnj3U/HCwkRVySHRZs2s4eZveCVncPoCzHMI=)
2.3使用PBEWithMD5AndTripleDES算法
加密类:StrongTextEncryptor, 加密算法: PBEWithMD5AndTripleDES。
在yml中指定算法PBEWithMD5AndTripleDES。
jasypt:
encryptor:
password: U3buwRJdQ2023
algorithm: PBEWithMD5AndTripleDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator
hub:
example:
password: ENC(DSycZtCUhenQZLgpLmnKwFM20fGtEfv46aD8lyipSEE=)
3.测试代码
代码:
@RestController
@RequestMapping("/hub/example/city")
@Slf4j
public class CityController {
@Value("${hub.example.password}")
private String cusPassword;
@GetMapping("/load01")
public Object load01() {
log.info("测试开始...");
log.info("从yml文件中获取hub.example.password=" + cusPassword);
log.info("测试结束...");
return "执行成功";
}
}
解析:
使用注解从yml中取出的加密内容已经成功解密。
4.生成加密示例代码
public class JasyptDemo {
public static void main(String[] args) {
f1_BasicTextEncryptor();
f2_AES256TextEncryptor();
f3_StrongTextEncryptor();
}
/**
* 加密工具类: org.jasypt.util.text.BasicTextEncryptor
* 加密算法: PBEWithMD5AndDES
*/
public static void f1_BasicTextEncryptor() {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
System.out.println("当前加密方式: 加密类: BasicTextEncryptor, 加密算法: PBEWithMD5AndDES ");
// 1.设置秘钥
String salt = "U3buwRJdQ2023";
textEncryptor.setPassword(salt);
// 2.加密
// 2.1加密内容
String pd = "Hangzhou20230427";
System.out.println("加密前: " + pd);
// 2.2加密操作
String pdAfterEncrypt = textEncryptor.encrypt(pd);
System.out.println("加密后: " + pdAfterEncrypt);
// 3.解密操作
String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
System.out.println("解密后: " + pdAfterDecrypt);
}
/**
* 加密工具类: org.jasypt.util.text.AES256TextEncryptor
* 加密算法: PBEWithHMACSHA512AndAES_256
*/
public static void f2_AES256TextEncryptor() {
AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
System.out.println("当前加密方式: 加密类: AES256TextEncryptor, 加密算法: PBEWithHMACSHA512AndAES_256 ");
// 1.设置秘钥
String salt = "U3buwRJdQ2023";
textEncryptor.setPassword(salt);
// 2.加密
// 2.1加密内容
String pd = "Hangzhou20230427";
System.out.println("加密前: " + pd);
// 2.2加密操作
String pdAfterEncrypt = textEncryptor.encrypt(pd);
System.out.println("加密后: " + pdAfterEncrypt);
// 3.解密操作
String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
System.out.println("解密后: " + pdAfterDecrypt);
}
/**
* 加密工具类: org.jasypt.util.text.StrongTextEncryptor
* 加密算法: PBEWithMD5AndTripleDES
*/
public static void f3_StrongTextEncryptor() {
StrongTextEncryptor textEncryptor = new StrongTextEncryptor();
System.out.println("当前加密方式: 加密类: StrongTextEncryptor, 加密算法: PBEWithMD5AndTripleDES ");
// 1.设置秘钥
String salt = "U3buwRJdQ2023";
textEncryptor.setPassword(salt);
// 2.加密
// 2.1加密内容
String pd = "Hangzhou20230427";
System.out.println("加密前: " + pd);
// 2.2加密操作
String pdAfterEncrypt = textEncryptor.encrypt(pd);
System.out.println("加密后: " + pdAfterEncrypt);
// 3.解密操作
String pdAfterDecrypt = textEncryptor.decrypt(pdAfterEncrypt);
System.out.println("解密后: " + pdAfterDecrypt);
}
}
以上,感谢。
2023年4月27日