springboot 集成 Jasypt 为配置文件内容加密
Jasypt简介
转述下Jasypt官网(http://www.jasypt.org/)的解释,Jasypt 是一个 Java 库,允许开发人员轻松地为他们的项目添加基本加密功能,而无需深入了解加密的工作原理。它提供高安全性、基于标准的加密技术,支持单向和双向加密。可以加密密码、文本、数字、二进制数据等。与 Hibernate 实现透明集成。 适用于基于 Spring 的应用程序,也可与 Spring Security 实现透明集成。 具备加密应用程序配置(如数据源)的集成功能。 为多处理器或多核系统提供高性能加密的特定功能。 使用任何 JCE 提供程序(Java Cryptography Extension)的开放 API。
在项目中,一般是去给配置文件中敏感信息进行加密处理,特别是生产环境的配置信息,比如数据库账号密码等。下面说下集成过程。
引入依赖包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
添加jasypt相关配置
jasypt:
encryptor:
password: KASJDHKCSAJSA # 用于加密/解密用的密钥
algorithm: PBEWithMD5AndDES # 加密方式
ivGeneratorClassname: org.jasypt.iv.NoIvGenerator # 生成器类名
该jasypt相关配置,最好不要放到配置文件中,有两种方式,一种是生产部署时,将参数传入进去,另一种是写入到代码中,下面说一下如何写入到代码中:
@Component
@Configuration
public class StringEncryptorConfig {
@Bean("jasyptStringEncryptor")
public StandardPBEStringEncryptor stringEncryptor(){
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("KASJDHKCSAJSA");//用于加密/解密用的密钥
encryptor.setAlgorithm("PBEWithMD5AndDES");//加密方式
encryptor.setIvGenerator(new NoIvGenerator());//生成器类名
return encryptor;
}
}
获取加密后的信息
@Test
public void test() {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("KASJDHKCSAJSA");//设置密钥
//加密
String str = textEncryptor.encrypt("SHUJUKUMIMA");
System.out.println("加密后"+str);
//解密
String decrypt = textEncryptor.decrypt(str);
System.out.println("解密后"+decrypt);
}
将加密后的信息放入到配置文件中
“ENC(” 和 “)” 为加密字段的前缀和后缀,主要是用于jasypt识别哪些信息是进行加密的,该前缀和后缀是支持自定义的。
spring:
datasource:
password: ENC(HHKLJJHBJHBKJNJKJKJJJBHJB)
到这里,基本就完成了