1. 导入依赖
xml
复制代码
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>
我的Demo里使用的是SpringBoot3.0
之后的版本,所以大家如果像我一样都是基于SpringBoot3.0之后的,jasypt
一定要使用3.0.5以后的版本。
2. 使用jasypt
我们在配置文件里写几行配置
yaml
复制代码
jasypt: encryptor: password: sdjsdbshdbfuasd property: prefix: ENC( suffix: )
password
是加密密码,必须配置这一项,值可以随便输入。prefix
和suffix
是默认配置,也可以自定义,默认值就是ENC(
和)
,这个是自动解密使用的。
2.1. 加/解密
jasypt 提供了一个工具类接口,StringEncryptor
,这个接口提供了加解密方法。下面是他的源码。
java
复制代码
public interface StringEncryptor { /** * 加密输入信息 * * @param 要加密的信息 * @return 加密结果 */ public String encrypt(String message); /** * 解密加密信息 * * @param 加密信息(encryptedMessage) 要解密的加密信息 * @return 解密结果 */ public String decrypt(String encryptedMessage); }
我们在 test 测试类中,将要进行加密的文本使用encrypt
方法进行加密
java
复制代码
@SpringBootTest @Slf4j class JasryptApplicationTests { @Autowired private StringEncryptor stringEncryptor; @Test void contextLoads() { String username = stringEncryptor.encrypt("root"); String password = stringEncryptor.encrypt("root"); log.info("username encrypt is {}", username); log.info("password encrypt is {}", password); log.info("username decrypt is {}", stringEncryptor.decrypt(username)); log.info("password decrypt is {}", stringEncryptor.decrypt(password)); } }
上边代码,加密的内容是,MySQL的用户名
和密码
,同时对它们进行加密和解密,你当然可以对任意配置信息进行加解密操作。看看输出内容:
log
复制代码
2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username encrypt is 61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot 2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password encrypt is a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv 2023-07-23T18:59:50.623+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username decrypt is root 2023-07-23T18:59:50.630+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password decrypt is root
加密默认使用的是PBEWITHHMACSHA512ANDAES_256
加密 我们将密文,替换到数据源,配置:
yaml
复制代码
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/honey?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8 username: ENC(61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot) password: ENC(a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv)
⚠️注意别忘了加上前缀和后缀,如上边代码。
这个时候就已经完成了,但是官方不建议我们将加密密码放到配置文件中,我们应作为系统属性、命令行参数或环境变量传递,只要其名称是 jasypt.encryptor.password
,就能正常工作。
我们可以将项目打为jar包
然后使用 java -jar
命令
java
复制代码
java -jar jasrypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=加密密码
⚠️加密密码必须与之前给属性加密时用的加密密码一致。