Jasypt 即Java Simplified Encryption。是一个Java库,允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需对加密的工作原理有深入的了解。
可无缝集成到Spring应用程序中,并具有针对Spring 2,Spring 3.0,Spring 3.1和Spring 4.0的特定集成功能。jasypt中的所有摘要器和加密器都设计为可以从Spring轻松使用(实例化,依赖注入...)。并且,由于它们是线程安全的,因此可以在像Spring这样的面向单例的环境中使用而无需担心同步
二进制加密支持。Jasypt允许对二进制文件(字节数组)进行摘要和加密。在需要时加密对象或文件(例如,通过网络发送)。
支持数字加密。除了文本和二进制文件,它还允许对数值进行摘要和加密(BigInteger和BigDecimal,在加密以保持Hibernate持久性时,还支持其他数字类型)
以上是官方文档中对于jaspyt的介绍。总之一句话,jaspyt简单易用,可以满足基本的简单加密需求
接下来看一下如何使用他
第一步:引入jasypt依赖
此处要注意引入的jaspyt版本号和springboot项目的版本号要对应上。springboot是2.x版本的,那么jaspyt的版本也要找2.x版本的。
这里直接引入的是jasypt-spring-boot-starter,即springboot集成的启动器stater,有的博主写的是引入jasypt-spring-boot(引入这一个依赖还需要在Application类上添加注解,比较繁琐,所以建议引入jasypt-spring-boot-starter这个依赖。)
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.8</version>
</dependency>
第二步:选定加密私钥,使用jaspyt工具类将要加密的文本进行加密
假如我们本次选择的加密私钥为jaspyt-test.那么我们就在下面的工具类中,修改一下加解密的密钥,配置为我们想要设置的密钥。然后在main方法中,把我们想要加密的文本加密了。保留住,第三步要使用。
package com.eastport.swimport.util;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
public class CryptorTest {
/**
* 加密方法
* @param plainText 需加密文本
*/
public static void testEncrypt(String plainText) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
// 加密的算法,这个算法是默认的
config.setAlgorithm("PBEWithMD5AndDES");
//加密的密钥,自定义
config.setPassword("jaspyt-test");
standardPBEStringEncryptor.setConfig(config);
String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
System.out.println(encryptedText);
}
/**
* 解密方法
* @param encryptedText 需解密文本
*/
public static void testDecrypt(String encryptedText) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
// 解密的算法,需同加密算法相同
config.setAlgorithm("PBEWithMD5AndDES");
//解密的密钥,需同加密密钥相同
config.setPassword("jaspyt-test");
standardPBEStringEncryptor.setConfig(config);
String plainText = standardPBEStringEncryptor.decrypt(encryptedText);
System.out.println(plainText);
}
public static void main(String[] args){
testEncrypt("expuser");
// testDecrypt("TU1NovjRHGyjp7cSc6v0sQ==");
}
}
第三步:将选定的私钥 和 加密后的串配置到配置文件中
首先在总配置文件中,指定一下我们加密的私钥是什么(因为如果涉及到环境切换的话,配置这里比较省事),即开启程序中jaspyt的配置,同时告诉程序,加解密的私钥是什么。如下图所示
然后将我们加密之后得到的 串 配置到对应的开发、测试、生产环境对应的配置文件中。注意必须是ENC()包住我们加密的串。
到这一步就算完成了我们的springboot集成jaspyt。
实现之后我们发现,其实这样的操作只能实现一个非明文展示的效果,如果窃密者拿到我们的配置文件的话,通过我们配置的私钥和jaspyt工具类也能解密出来我们的信息。所以这个jaspyt的用途只能是非明文的配置方式进行相关配置。并不能实现真正的加密。
如果实践过程有什么问题,欢迎提问一起交流
转载清注明出处。