我们在写配置文件的时候经常会涉及到密码,比如数据库,redis,RabbitMQ等,那这种密码如果直接写明文的话,会存在一定风险,比如开发人员离职后,还知道原来数据库的密码,那就风险很大,所以有必要把密码加密。
- 加依赖
<!-- jasypt 加解密 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
- 加密解密测试
package com.imooc.test;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class JasyptTest {
@Test
public void testPwdEncrypt() {
// 实例化加密器
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
// 配置加密算法和秘钥
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setPassword("zhushanglin"); // 用于加密的秘钥(盐),可以是随机字符串,或者固定,一定要存储好,不要被其他人知道
config.setAlgorithm("PBEWithMD5AndDES"); // 设置加密算法,默认
encryptor.setConfig(config);
// 对密码进行加密
String myPwd = "guest";
String encryptedPwd = encryptor.encrypt(myPwd);
System.out.println("++++++++++++++++++++++++++++++");
System.out.println("+ 原密码为:" + myPwd);
System.out.println("+ 加密后的密码为:" + encryptedPwd);
System.out.println("++++++++++++++++++++++++++++++");
}
@Test
public void testPwdDecrypt() {
// 实例化加密器
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
// 配置加密算法和秘钥
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setPassword("zhushanglin"); // 用于加密的秘钥(盐),可以是随机字符串,或者固定,一定要存储好,不要被其他人知道
config.setAlgorithm("PBEWithMD5AndDES"); // 设置加密算法,默认
encryptor.setConfig(config);
// 对密码进行解密
String pendingPwd = "BKUDo+ArPPA5C9u2WqbmUQ==";
String myPwd = encryptor.decrypt(pendingPwd);
System.out.println("++++++++++++++++++++++++++++++");
System.out.println("+ 解密后的密码为:" + myPwd);
System.out.println("++++++++++++++++++++++++++++++");
}
}
- 配置文件中使用
密文用ENC()包起来