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

 

posted @ 2020-05-24 15:30  tangfeifei2020  阅读(2495)  评论(0)    收藏  举报