头图
  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以后的版本。

  1. 使用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=加密密码

⚠️加密密码必须与之前给属性加密时用的加密密码一致。

转载来源:https://juejin.cn/post/7258850748149203000


运维社
12 声望4 粉丝