jasypt springboot 解密失败出现乱码
springboot2.X jasypt-spring-boot-starter version2.1.1
1.首先得到加密后的内容
加密过程
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
config.setPassword("1234455");
StandardPBEStringEncryptor enc = new StandardPBEStringEncryptor();
enc.setConfig(config2);
String result = enc.encrypt("helloworld");
在application.properties 中使用ENC(resule )自动解密的会失败出现乱码
原因如下,
ENC自动解密使用的PooledPBEStringEncryptor 解密的
private StringEncryptor createPBEDefault(Environment e) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(getRequiredProperty(e, "jasypt.encryptor.password"));
config.setAlgorithm(getProperty(e, "jasypt.encryptor.algorithm", "PBEWithMD5AndDES"));
config.setKeyObtentionIterations(getProperty(e, "jasypt.encryptor.keyObtentionIterations", "1000"));
config.setPoolSize(getProperty(e, "jasypt.encryptor.poolSize", "1"));
config.setProviderName(getProperty(e, "jasypt.encryptor.providerName", null));
config.setProviderClassName(getProperty(e, "jasypt.encryptor.providerClassName", null));
config.setSaltGeneratorClassName(getProperty(e, "jasypt.encryptor.saltGeneratorClassname", "org.jasypt.salt.RandomSaltGenerator"));
config.setIvGeneratorClassName(getProperty(e, "jasypt.encryptor.ivGeneratorClassname", "org.jasypt.salt.NoOpIVGenerator"));
config.setStringOutputType(getProperty(e, "jasypt.encryptor.stringOutputType", "base64"));
encryptor.setConfig(config);
return encryptor;
}
config.setIvGeneratorClassName(getProperty(e, "jasypt.encryptor.ivGeneratorClassname", "org.jasypt.salt.NoOpIVGenerator"));
jasypt.encryptor.ivGeneratorClassname 默认值是org.jasypt.salt.NoOpIVGenerator
而我们加密的过程使用的是StandardPBEStringEncryptor,它里面有个属性 StandardPBEByteEncryptor 在初始化的过程中调用了 initialize方法; ivGenerator = new RandomIVGenerator();
public synchronized void initialize() {
if (ivGenerator == null) {
ivGenerator = new RandomIVGenerator();
}
所以解决方法就是在application.properties 中添加 jasypt.encryptor.ivGeneratorClassname=org.jasypt.salt.RandomIVGenerator,或者 更改jasypt-spring-boot-starter version2.1.0

浙公网安备 33010602011771号