springboot 集成 jasypt 实现对配置文件非明文展示-详解

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这个依赖。)


    com.github.ulisesbocchio
	jasypt-spring-boot-starter
    1.8

第二步:选定加密私钥,使用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的配置,同时告诉程序,加解密的私钥是什么。如下图所示

springboot 集成 jasypt 实现对配置文件非明文展示-详解_第1张图片

然后将我们加密之后得到的 串 配置到对应的开发、测试、生产环境对应的配置文件中。注意必须是ENC()包住我们加密的串。

springboot 集成 jasypt 实现对配置文件非明文展示-详解_第2张图片

到这一步就算完成了我们的springboot集成jaspyt。

 

实现之后我们发现,其实这样的操作只能实现一个非明文展示的效果,如果窃密者拿到我们的配置文件的话,通过我们配置的私钥和jaspyt工具类也能解密出来我们的信息。所以这个jaspyt的用途只能是非明文的配置方式进行相关配置。并不能实现真正的加密。

如果实践过程有什么问题,欢迎提问一起交流

转载清注明出处。

你可能感兴趣的:(加解密,spring,boot)