注意
springboot 3.0 以后的版本,使用 jasypt-spring-boot-starter 3.0.5 以后的版本。
导入依赖
1 2 3 4 5
| <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>
|
使用 jasypt
1 2 3 4 5 6
| jasypt: encryptor: password: sdjsdbshdbfuasd property: prefix: ENC( suffix: )
|
password 加密密码
prefix和suffix是默认值,支持自定义,自动解密使用
jasypt 提供了一个工具类接口,StringEncryptor,这个接口提供了加解密方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public interface StringEncryptor { /** * 加密输入信息 * * @param 要加密的信息 * @return 加密结果 */ public String encrypt(String message);
/** * 解密加密信息 * * @param 加密信息(encryptedMessage) 要解密的加密信息 * @return 解密结果 */ public String decrypt(String encryptedMessage); }
|
我们在 test 测试类中,将要进行加密的文本使用encrypt方法进行加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @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的用户名和密码,同时对它们进行加密和解密。
1 2 3 4
| 2023-10-23T08:29:31.321+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username encrypt is 61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot 2023-10-23T08:29:31.321+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password encrypt is a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv 2023-10-23T08:29:31.323+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username decrypt is root 2023-10-23T08:29:31.330+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password decrypt is root
|
加密默认使用的是PBEWITHHMACSHA512ANDAES_256加密 我们将密文,替换到数据源,注意别忘了加上前缀和后缀,如上边代码,配置:
1 2 3 4 5 6
| spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/jasypt_test? useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8 username: ENC(61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot) password: ENC(a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv)
|
这个时候就已经完成了,但是官方不建议我们将加密密码放到配置文件中,我们应作为系统属性、命令行参数或环境变量传递,只要其名称是jasypt.encryptor.password
,就能正常工作。
我们可以将项目打为jar包
然后使用java -jar
命令。
1
| java -jar jasrypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=加密密码
|
最后更新时间: