SpringBoot集成jasypt对yml敏感的数据进行加密
pom依赖
xml<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency>添加yml配置信息
yamljasypt: encryptor: # 加密的秘钥 password: qnmdmyy # 加密算法 algorithm: PBEWithMD5AndDES或者PBEWITHHMACSHA512ANDAES_256 iv-generator-classname: org.jasypt.iv.RandomIvGenerator property: # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密 prefix: Enc( suffix: )jasypt3.0后,默认支持的算法为 PBEWITHHMACSHA512ANDAES_256 ,该算法需要JDK1.9 以上支持或者添加JCE(Java Cryptography Extension 无限强度权限策略文件)支持。
两种密码加密的方式还是有区别的,如果追求高安全性和性能,推荐使用PBEWITHHMACSHA512ANDAES_256

如何添加JCE?

获取JCE文件
JDK6密码扩展无限制权限策略文件 http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html JDK7密码扩展无限制权限策略文件 https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html JDK8密码扩展无限制权限策略文件 https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
生成加密数据工具类
java// PBEWithMD5AndDES算法所需要的工具类 public class JasyptUtils { public static void main(String[] args) { String info = encrypt("root"); System.out.println(info); } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); // 指定算法 config.setAlgorithm("PBEWithMD5AndDES"); // 指定秘钥,和yml配置文件中保持一致 config.setPassword("qnmdmyy"); encryptor.setConfig(config); // 生成加密数据 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("qnmdmyy"); encryptor.setConfig(config); // 解密数据 return encryptor.decrypt(data); } } // PBEWITHHMACSHA512ANDAES_256算法所需工具类 public class JasyptUtil { public static void main(String[] args) { } /** * 加密 * * @param plaintext 明文 * @return */ public static String encrypt(String plaintext) { // 1. 创建加解密工具实例 PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); // 2. 加解密配置 SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("qnmdmyy"); config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 为减少配置文件的书写,以下都是 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); // 3. 加密 return encryptor.encrypt(plaintext); } /** * 解密 * * @param data 加密后数据 * @return */ public static String decrypt(String data) { // 1. 创建加解密工具实例 PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); // 2. 加解密配置 SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("qnmdmyy"); config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 为减少配置文件的书写,以下都是 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); // 3. 加密 return encryptor.decrypt(data); } }执行加密算法并在yml中替换敏感信息


对加密秘钥进行处理: 加密秘钥在yml文件中明文存储是不安全的
在idea中测试时,可以进行如下配置

打包部署可以使用以下两个指令
shell#方式1: java -jar xxx.jar -Djasypt.encryptor.password=qnmdmyy #方式2: java -jar xxx.jar --jasypt.encryptor.password=qnmdmyy既然使用指令配置秘钥,那么在docker构建项目镜像的时候就需要对以下原命令进行相应的修改

