在我们的服务中不可避免的需要使用到一些秘钥(数据库、mongodb等),生产如果采用明文配置讲会有安全问题,jasypt是一个通用的加解密库,使用它可以保证我们的安全性。
使用
1. 首先在pom.xml中引入相关依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
2. 在properties.yaml文件中配置密钥
jasypt:
encryptor:
password: demo
3. 测试
import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* jasypt 加密与解密
* jasypt来解密的密文需要用“ENC(......)”括起来
* 每次加密产生的密文都不一样
* 但是不一样的密文解密产生的结果是一样的
* 密文只有对应的跟秘钥才能解析出来明文
*
* @since 2020-05-14
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class JasyptApplicationTest {
@Autowired
private StringEncryptor stringEncryptor;
@Test
public void contextLoads() {
//加密方法
System.out.println(stringEncryptor.encrypt("123456"));
System.out.println(stringEncryptor.encrypt("123456"));
//解密方法
System.out.println(stringEncryptor.decrypt("43xaxZ5QSRsVNXnX+gbltQ=="));
System.out.println(stringEncryptor.decrypt("SU2SJbOmqSOnZRmu6zSxNw=="));
}
}
运行测试结果如下,可以看到,每次加密产生的密文都不一样,但是不一样的密文解密产生的结果是一样的。密文只有对应的跟秘钥才能解析出来明文,不然会抛错org.jasypt.exceptions.EncryptionOperationNotPossibleException
运行结果
使用
在properties.yaml文件中,需要jasypt来解密的密文需要用“ENC(......)”
括起来。
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: ENC(43xaxZ5QSRsVNXnX+gbltQ==)