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

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实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

相关推荐
brzhang1 分钟前
别再梭哈 Curosr 了!这 AI 神器直接把需求、架构、任务一条龙全干了!
前端·后端·架构
安妮的心动录16 分钟前
安妮的2025 Q2 Review
后端·程序员
程序员爱钓鱼16 分钟前
Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
后端·google·go
Victor3561 小时前
MySQL(140)如何解决外键约束冲突?
后端
Victor3561 小时前
MySQL(139)如何处理MySQL字符编码问题?
后端
007php0072 小时前
服务器上PHP环境安装与更新版本和扩展(安装PHP、Nginx、Redis、Swoole和OPcache)
运维·服务器·后端·nginx·golang·测试用例·php
武子康5 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
椰椰椰耶7 小时前
【Spring】拦截器详解
java·后端·spring
brzhang8 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构