Jasypt
是一个功能强大、易于使用的Java加密库
,适用于需要进行数据加密
和安全保护
的各类应用程序和系统。
实战
1、引入依赖
说明:JDK1.8 选择2.x版本,高一些版本的JDK就选择3.x的版本。
xml
xml
<!-- jasypt 加解密 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
2、编写测试代码
我们编写SpringBootTest测试类,来完成加解密的基本功能。
其中testPwdEncrypt()
是加密方法,testPwdDecrypt()
是解密方法。
arduino
java
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("chengxuyuanjidian"); // 用于加密的秘钥(盐),可以是随机字符串,或者固定,一定要存储好,不要被其他人知道
config.setAlgorithm("PBEWithMD5AndDES"); // 设置加密算法,默认
encryptor.setConfig(config);
// 对密码进行加密
String myPwd = "imooc";
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("chengxuyuanjidian"); // 用于加密的秘钥(盐),可以是随机字符串,或者固定,一定要存储好,不要被其他人知道
config.setAlgorithm("PBEWithMD5AndDES"); // 设置加密算法,默认
encryptor.setConfig(config);
// 对密码进行解密
String pendingPwd = "XD8gz6KU4d/n3DKgeNASBw==";
String myPwd = encryptor.decrypt(pendingPwd);
System.out.println("++++++++++++++++++++++++++++++");
System.out.println("+ 解密后的密码为:" + myPwd);
System.out.println("++++++++++++++++++++++++++++++");
}
}
如上代码,我们假设对rabbitmq
的密码进行加密,比如就是默认的guest
,我们做一下加密,我设置的盐
是chengxuyuanjidian
(程序员济癫拼音),打印出来结果是:
diff
++++++++++++++++++++++++++++++
+ 原密码为:guest
+ 加密后的密码为:XD8gz6KU4d/n3DKgeNASBw==
++++++++++++++++++++++++++++++
同样的,我们调用解密
方法,对内容进行解密
,也能得到原来的guest
。
diff
++++++++++++++++++++++++++++++
+ 解密后的密码为:guest
++++++++++++++++++++++++++++++
3、配置文件加密
好了,接下来,我们可以对配置文件
的某些内容
进行加密
了,这里我就以application.yml
中关于rabbitmq
的密码
进行加密。
首先,我们在配置文件中加上Jasypt
的配置,这样启动后会自动加入Spring容器
管理。
yaml
yml
jasypt:
encryptor:
algorithm: PBEWithMD5AndDES # 算法,这里使用默认的。
password: chengxuyuanjidian # 盐,和测试类的一样。
然后,我们通过测试类获得rabbitmq
对密码加密
后的字符串
,假设还是guest
,那么我们就拿到了XD8gz6KU4d/n3DKgeNASBw==
。
所以,在yml中像这样配置下:
yaml
yml
spring:
rabbitmq:
host: 192.168.1.122
port: 5672
virtual-host: /
username: guest
password: ENC(XD8gz6KU4d/n3DKgeNASBw==)
listener:
simple:
acknowledge-mode: manual # 手动ack确认
jasypt:
encryptor:
algorithm: PBEWithMD5AndDES
password: chengxuyuanjidian
rabbitmq
的password
使用ENC(加密后的字符串)
的形式来书写,这样当项目启动后,Spring容器
会使用Jasypt工具
对配置文件中的密文进行解密,得到真正的配置内容。
总结
用法其实很简单,不得不说这个工具很实用。
最后说一句(求关注!别白嫖!)
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!