网上找的很多都是使用 jasypt 来加密 ,记录一下使用的整体过程
依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
public class MyStringEncryptor implements StringEncryptor {
/**
* 加解密PBE 算法
*/
public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES";
public static final String PBE_ALGORITHMS_MD5_TRIPLEDES = "PBEWITHMD5ANDTRIPLEDES";
public static final String PBE_ALGORITHMS_SHA1_DESEDE = "PBEWITHSHA1ANDDESEDE";
public static final String PBE_ALGORITHMS_SHA1_RC2_40 = "PBEWITHSHA1ANDRC2_40";
// public static void main(String[] args) {
// PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
//
// SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// // 加密盐值
// config.setPassword("qizhi");
// // 加解密算法
// config.setAlgorithm(PBE_ALGORITHMS_MD5_DES);
// // 设置密钥获取迭代次数
// config.setKeyObtentionIterations(1000);
// // 线程池大小:默认1
// config.setPoolSize(1);
// // 盐值生成器className
// config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
// // iv(initialization vector,初始化向量) 生成器className
// config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
// // 设置字符串输出类型
// config.setStringOutputType("base64");
// encryptor.setConfig(config);
// String encrypt = encryptor.encrypt("需要加密的密码");
// System.out.println("ENC("+encrypt+")");
//
// }
/**
* 加解密盐值
*/
private String pa;
/**
* 加解密算法
*/
private String algorithm = PBE_ALGORITHMS_MD5_DES;
public MyStringEncryptor(String pa) {
this.pa = pa;
}
public MyStringEncryptor(String password, String algorithm) {
this.pa = password;
this.algorithm = algorithm;
}
@Override
public String encrypt(String message) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// 加解密盐值
encryptor.setConfig(getConfig(this.pa));
return encryptor.encrypt(message);
}
@Override
public String decrypt(String encryptedMessage) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(getConfig(this.pa));
return encryptor.decrypt(encryptedMessage);
}
public SimpleStringPBEConfig getConfig(String password) {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// 加密盐值
config.setPassword(password);
// 加解密算法
config.setAlgorithm(PBE_ALGORITHMS_MD5_DES);
// 设置密钥获取迭代次数
config.setKeyObtentionIterations(1000);
// 线程池大小:默认1
config.setPoolSize(1);
// 盐值生成器className
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
// iv(initialization vector,初始化向量) 生成器className
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
// 设置字符串输出类型
config.setStringOutputType("base64");
return config;
}
}
里面的pa 就是 password , 为什么换了是因为password还是会被扫描出来
上面的是主要的加密解密方式等
然后再注入到项目中
@Configuration
public class JasyptConfig {
/**
* 加解密盐值
*/
@Value("${jasypt.encryptor.password}")
private String pa ;
// @Bean("jasyptStringEncryptor")
@Bean("myStringEncryptor")
public StringEncryptor myStringEncryptor() {
return new MyStringEncryptor(pa);
}
}
在配置文件中 需要配置 加密的密钥 和 指定bean的名称
jasypt:
encryptor:
# 指定加解密在spring ioc容器中bean的名称,默认 jasyptStringEncryptor
bean: myStringEncryptor
password:
注意: 这里密码可以采用其他的 系统变量去设置,但是觉得麻烦,密码我是注释掉了,在代码里面加了一个定值 , 主要就是去通过扫描 。
最后就是 把配置文件中的密码 替换成 ENC(*****) ,这个是工具类中 密码跑出来的值。
之前试的几种方式都是
Decryption of Properties failed, make sure encryption/decryption passwords match
说我配置的密钥不对,, 感觉这种方式最为稳妥