1、加密介绍
在yml配置文件中会存在一些敏感数据,比如用户名,密码,第三方应用的密钥等等。这些信息是以明文的形式出现在文件中,存在较大安全隐患。Jasypt(Java Simplified Encryption)是一个Java库,可以很方便的对yml文件中的敏感信息加密处理。本文是介绍在SpringBoot项目中运用Jasypt的基础案例。
2、代码实现加解密
(1) 引入pom依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
(2) 编写Jasypt的yml配置文件
# 加密配置
jasypt:
encryptor:
# 指定加密密钥,生产环境建议放到启动参数
password: your-secret
# 指定解密算法,需要和加密时使用的算法一致
algorithm: PBEWithMD5AndDES
# 指定initialization vector类型
iv-generator-classname: org.jasypt.iv.NoIvGenerator
(3) 基于jasypt编写加解密工具类
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
/**
* 加解密工具类
*/
public class EncrypDecryptUtil {
/**
* 设置加解密时的基础参数,与yml配置文件保持一致
* @param password
* @return
*/
public static SimpleStringPBEConfig config(String password){
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM); // 设置加解密算法
config.setPoolSize(1); // 设置连接池大小
config.setStringOutputType("base64"); // 设置输出类型
return config;
}
/**
* 加密
* @param password 加密时使用的密码
* @param value 需要加密的值
* @return
*/
public static String encypt(String password, String value){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config(password));
String encrypt = encryptor.encrypt(value);
return encrypt;
}
/**
* 解密
* @param password 解密时使用的密码
* @param value 需要解密的值
* @return
*/
public static String decypt(String password, String value) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config(password));
String decrypt = encryptor.decrypt(value);
return decrypt;
}
// 测试
public static void main(String[] args) {
String salt = "HelloKitty";
// 加密
String encypt = EncrypDecryptUtil.encypt(salt, "root123");
System.out.println("encypt = " + encypt);
// 解密
String decypt = EncrypDecryptUtil.decypt(salt, encypt);
System.out.println("decypt = " + decypt);
}
}
3、使用说明
- 在引入依赖,编写对应的yml配置信息后,将敏感信息加密成密文,替换之前的明文信息。替换时,需要在密文前面加上ENC(代表解密标识),并且将密文放在小括号里。 当要用到对应的密文时,Jasypt会自动进行解密操作。