介绍
本人由于springboot项目中需要使用enc加密配置文件中的账号密码
,所以使用jasypt-spring-boot-starter配置加密和使用org.jasypt生成enc加密串
1.依赖
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
2.jasypt-spring-boot-starter配置
配置文件配置加密的加密方式和加密的密钥,使用的话,直接ENC()(里面填加密后的加密串),然后启动项目,项目会自动将配置文件中带enc的进行解密
jasypt:
encryptor:
algorithm: PBEWithHmacSHA512AndAES_256
password: my-password
3.编写加密工具类型
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
/**
* @Author huangshuai
* @Description: 加解密密算法
* @Date 2023/5/30 7:48 下午
*/
public class JasyptUtil {
/**
* @Author: huangshuai
* @Description: textToEncrypt,需要加密的明文, salt,加密的盐,需要与解密保持一致, algorithm,加密算法,需要与解密算法保持一致
* @Date: 2023/5/30
* @Param textToEncrypt:
* @Param salt:
* @Param algorithm:
* @Return: java.lang.String
**/
public static String encrypt(String textToEncrypt, String salt, String algorithm) {
// 1. 创建加解密工具实例
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// 2. 加解密配置
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(salt);
// 3. 加密算法,需要与解密算法一致
config.setAlgorithm(algorithm);
// 为减少配置文件的书写,以下都是 Jasyp 3.x 版本,配置文件默认配置
config.setKeyObtentionIterations( "1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
// 4. 加密
return encryptor.encrypt(textToEncrypt);
}
/**
* @Author: huangshuai
* @Description: textToDecrypt,需要解密的密文, alt,解密的盐,需要与加密保持一致, algorithm,解密算法,需要与加密算法保持一致
* @Date: 2023/5/30
* @Param textToDecrypt:
* @Param salt:
* @Param algorithm:
* @Return: java.lang.String
**/
public static String decrypt(String textToDecrypt, String salt, String algorithm){
// 1. 创建加解密工具实例
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// 2. 加解密配置
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(salt);
// 3. 解密算法,必须与加密算法一致
config.setAlgorithm(algorithm);
// 为减少配置文件的书写,以下都是 Jasyp 3.x 版本,配置文件默认配置
config.setKeyObtentionIterations( "1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
// 4. 解密
return encryptor.decrypt(textToDecrypt);
}
public static void main(String[] args) {
System.out.println(encrypt("root", "my-password", "PBEWithHmacSHA512AndAES_256"));
// System.out.println(decrypt("ZgF88+npcNxHRcGzN0y/wh1+IAVH330hNDyxMFB/29LM9rTmIEMh6O/odpRVxF1K", "my-password", "PBEWithHmacSHA512AndAES_256"));
}
}
4.注意事项
- PBEWithHmacSHA512AndAES_256加密算法直接使用Jasypt的命令行无法生成加密串,可能是不支持吧。使用PBEWithMD5AndDES可以直接生成
- 并且在编写工具类的时候,PBEWithMD5AndDES可以直接最简单的设置加密算法和密钥就直接生成,但如果是PBEWithHmacSHA512AndAES_256会报错,原因暂时未知,建议使用我的3里面的工具类,经过验证可以使用