1、pom加入
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2、生成加密后的密码
用下面这几个方法测试加、解密。
public static String encyptPwd(String password,String value){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor(password));
String result = encryptor.encrypt(value);
return result;
}
public static String decyptPwd(String password,String value){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor(password));
String result = encryptor.decrypt(value);
return result;
}
public static SimpleStringPBEConfig cryptor(String password){
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
return config;
}
3、项目配置文件(如application.properties),最少要配这三个
(1)数据源密码重新配置:
spring.datasource.password=ENC(XXXXXXX)
#加密后的密码用ENC()包住
(2)jasypt相关配置也要写到配置文件里:
jasypt.encryptor.iv-generator-classname:org.jasypt.iv.NoIvGenerator
jasypt.encryptor.algorithm:PBEWithMD5AndDES
#至少提供这两个配置,算法要跟生成密码时的算法一致
jasypt.encryptor.password:slat
#jasypt.encryptor.password 这个参数可以配到其它地方,如环境变量,启动参数,System Property等
4、重点说明
(1)实现方法跟jasypt的版本有关,jasypt不同版本配置不一样。
(2)jasypt配置参数除了在项目配置文件(如application.properties)中配置外,还可以环境变量,启动参数,java代码里(如启动时设置System.setProperty("XXXX","XXXXX"))设置。最好这些配置不要在项目配置文件中配置,增加安全性。
(3)可配置自定义密码串标识,以增加安全性,如下
jasypt.encryptor.property.prefix=XX(
jasypt.encryptor.property.suffix=)
密码串标识ENC() 代替为:XX()