【Jasypt】Spring Boot 配置文件加解密 Jasypt 配置文件加密
Jasypt是什么
首先,让我们解释一下什么是jasypt。jasypt是一款Java库,它提供了广泛使用的加密API,包括对称加密、非对称加密以及哈希算法。该库的主要用途是保护敏感数据的安全,例如数据库连接信息、用户名和密码等。
1、添加jasypt依赖
首先我们需要让我们的maven仓库有jasypt包,然后对他进行依赖,这样我们就可以使用他的功能了!
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2、添加jasypt的配置
jasypt:
encryptor:
# 自定义加密盐值(密钥)
password: jasypt
# 加密算法设置
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
3、添加主要配置JasyptConfig
JasyptConfig用于初始化jasypt的配置
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author **
* @date 2023-09-19
*/
@Configuration(value = "jasyptConfig")
public class JasyptConfig {
/**
* 自定义 StringEncryptor,覆盖默认的 StringEncryptor
*/
@Bean(value = "jasyptStringEncryptor")
public StringEncryptor jasyptStringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("jasypt");
config.setAlgorithm("PBEWithMD5AndDES");
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);
return encryptor;
}
}
4、添加工具类JasyptUtils(也可以不添加,作用是加密你的密码)
注意:JasyptUtils的作用是把你的明文密码、用户名,进行算法处理得到加密后的密码。
当然也要注意你Config和yml里面的算法配置信息,以及盐值、IvGeneratorClassName、SaltGeneratorClassName,需要一致才能实现加密。(只实现功能直接copy,直接用就好了)
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
/**
* @author **
* @date 2023-09-19
*/
public class JasyptUtils {
/**
* 自己理解的加密盐值 也算是加密秘钥必须与配置文件中的一致
*/
private static final String SALT_VALUE = "jasypt";
/**
* 加密
* @param text 需要加密的字符串
* @return 加密后的字符串
*/
public static String encrypt(String text) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor());
return encryptor.encrypt(text);
}
/**
* 解密
* @param text 需要解密的字符串
* @return 解密后的字符串
*/
public static String decrypt(String text) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(cryptor());
return encryptor.decrypt(text);
}
/**
* 配置(对应yml中的配置)
* @return SimpleStringPBEConfig
*/
public static SimpleStringPBEConfig cryptor() {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
//设置盐值
config.setPassword(SALT_VALUE);
//设置算法配置信息
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setProviderName("SunJCE");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
config.setPoolSize("1");
return config;
}
public static void main(String[] args) {
// 加密
String encryptStr = encrypt("root123");
// 解密
String decryptStr = decrypt( encryptStr);
System.out.println("加密后:" + encryptStr);
System.out.println("解密后:" + decryptStr);
}
}
5、使用
在你的配置文件中内容:
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root123
更换为:
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ENC(arl9nMJgqPCllwlQ8KJ9XPwceuvX5KLY)
password: ENC(ZtwpMLXax1gHufXalME2Pva2l5Oi+DCI)
arl9nMJgqPCllwlQ8KJ9XPwceuvX5KLY
这串加密内容是通过JasyptUtils 去执行出来的加密结果。
注意:必须添加 ENC ( 你加密后的内容 )
本文完结!
更多有趣内容可关注公众号