1.报错截图
2.原因分析
Jasypt 3.0以上版本解密默认使用 PBEWITHHMACSHA512ANDAES_256算法
Jasypt 3.0以下版本解密默认使用PBEWithMD5AndDES算法
3.解决方法
3.1加密解密
加密和解密算法使用用一种算法(PBEWithMD5AndDES)
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
public class JasyptUtils {
/**
* 加密
*
* @param plaintext 明文
* @return 密文
*/
public static String encrypt(String plaintext) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
// 指定算法
config.setAlgorithm("PBEWithMD5AndDES");
// 指定秘钥,和jvm的jasypt.encryptor.password保持一致
config.setPassword("xxxxxxxx");
encryptor.setConfig(config);
// 生成加密数据
return encryptor.encrypt(plaintext);
}
/**
* 解密
*
* @param data 加密后数据
* @return 明文
*/
public static String decrypt(String data) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES");
// 指定秘钥,和jvm的jasypt.encryptor.password保持一致
config.setPassword("xxxxxxxx");
encryptor.setConfig(config);
// 解密数据
return encryptor.decrypt(data);
}
public static void main(String[] args) {
System.out.println(encrypt("密码"));
System.out.println( decrypt("AXprrFFdFjdWt9yCvqnC9OVqYpWTehur"));
}
}
3.2yml配置
在springboot3.x中iv-generator-classname和algorithm需要全部配置上
jasypt:
encryptor:
#password 本地环境将密钥放入yml文件中,生产需要jvm携带 -Djasypt.encryptor.password=xxxxx
password: xxxxx
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.NoIvGenerator