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会自动进行解密操作。