SpringBoot 项目开发中,配置文件都是对外暴露的。不符合开发时的规范jasypt 提供了配置文件的加密解密操作。
jasypt加解密的过程:
- 事先通过将需要加密的参数使用加密工具得到的密文写入配置文件,并在配置文件中使用ENC()“函数”(本质就是一个标记特征字符)进行标记;
- 应用启动的时候传入解密密钥(对称加密算法的密码、非对称加密算法的私钥),然后应用在读取配置参数键值的时候,如果发现键值中含有ENC标记,就将“ENC()”中的内容抽取出来,然后调用加解密接口(org.jasypt.encryption.StringEncryptor)的实现类进行解密,从而得到明文。加密操作同理。
1、增加依赖
<!--jasypt关键密码加密解密begin--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>1.16</version></dependency><!--jasypt关键密码加密解密end-->
2、生成需要加密的信息密文。
jasypt拥有自己的加密方式。默认是 StringEncryptor 代码中生成密文。
packagecom.tl.springboot.jasypt; importorg.jasypt.encryption.StringEncryptor; importorg.junit.Test; importorg.junit.runner.RunWith; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.boot.test.context.SpringBootTest; importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner; /*** OneTest** @author mjx* @date 2020/5/14*/SpringJUnit4ClassRunner.class) (publicclassOneTest { privateStringEncryptorstringEncryptor; publicvoidencrytest() { Stringencrypt=stringEncryptor.encrypt("admin"); System.out.println("加密"+encrypt); Stringdecrypt=stringEncryptor.decrypt(encrypt); System.out.println("解密 = "+decrypt); } }
或者自定义使用其他的加密方式,(实现)
publicvoidencrytestTwo() { // 同样是 jasypt 的加解密BasicTextEncryptorbasicTextEncryptor=newBasicTextEncryptor(); // 需要 设置 加密的 密码basicTextEncryptor.setPassword("hhh"); Stringencrypt=basicTextEncryptor.encrypt("222"); System.out.println("encrypt = "+encrypt); Stringdecrypt=basicTextEncryptor.decrypt(encrypt); System.out.println("decrypt = "+decrypt); }
3、配置文件中添加密文代码。
拷贝密文代码,替换配置文件中的信息
# 密钥jasypt encryptor password kkmima spring datasource one username root password ENC(7mSezIBBQ0/1UcpsJlc+Fw==) jdbc-url jdbc mysql //127.0.0.1 3306/test?serverTimezone=UTC driver-class-name com.mysql.cj.jdbc.Driver type com.zaxxer.hikari.HikariDataSource
注意:密文需要使用ENC开头并且,密文需要用括号括起来。
注意这里,密钥也在配置文件中 还是明文显示。密钥也可以放在别的地方。
1、直接放在代码中。
2、放在启动代码里。(项目因为是达成jar的方式进行运行的,所以在启动的时候是 java -jar 的方式启动) java -jar Djasypt.encryptor.password=kkmima xxx.jar 启动添加配置,
3、放在java配置中。运行时配置
选中项目然后在 VM options 中添加-Djasypt.encryptor.password=kkmima 那么在配置文件中 就可以不用配置
4、自定义加解密类,实现StringEncryptor接口
packagecom.mjx.config; importorg.jasypt.encryption.StringEncryptor; importorg.springframework.stereotype.Component; /*** @author mjx* @date */"myEncryptor") (publicclassMyEncryptorimplementsStringEncryptor { /**** 加密方法* @param :* @param* @return null* @author: MJX* @createtime: */publicStringencrypt(Strings) { System.out.println("加密使用 = "+s); returns; } /**** 解密操作* @param :* @param* @return null* @author: MJX* @createtime: */publicStringdecrypt(Strings) { System.out.println("待解密数据: = "+s); // 解密逻辑returns; } }
配置文件中指定加解密类
#指定加解密类jasypt.encryptor.bean=myEncryptor