再也不怕离职同事泄露配置文件的密码了

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

rabbitmqpassword使用 ENC(加密后的字符串) 的形式来书写,这样当项目启动后,Spring容器会使用Jasypt工具对配置文件中的密文进行解密,得到真正的配置内容。

总结

用法其实很简单,不得不说这个工具很实用。

最后说一句(求关注!别白嫖!)

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

相关推荐
DevOpsDojo15 分钟前
HTML语言的数据结构
开发语言·后端·golang
时韵瑶1 小时前
Scala语言的云计算
开发语言·后端·golang
Jerry Lau1 小时前
大模型-本地化部署调用--基于ollama+openWebUI+springBoot
java·spring boot·后端·llama
幼儿园老大*1 小时前
【系统架构】如何设计一个秒杀系统?
java·经验分享·后端·微服务·系统架构
fmdpenny1 小时前
Django的安装
后端·python·django
计算机-秋大田2 小时前
基于SSM的家庭记账本小程序设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
Code侠客行2 小时前
Scala语言的循环实现
开发语言·后端·golang
Cikiss2 小时前
「全网最细 + 实战源码案例」设计模式——简单工厂模式
java·后端·设计模式·简单工厂模式
小诺大人2 小时前
【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报
spring boot·后端·elk·logstash
Pandaconda3 小时前
【Golang 面试题】每日 3 题(三十九)
开发语言·经验分享·笔记·后端·面试·golang·go