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

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

相关推荐
一只小小Java14 小时前
Naocs本地部署&安装3.2.3+Spring boot 3.2.0
java·spring boot·后端·nacos
码兄科技1 天前
实战:基于Spring Boot + UniApp的地理信息小程序开发
spring boot·后端·uni-app
腾讯云云开发1 天前
腾讯云 CloudBase 登上 WAIC:我们为 Agent 重新设计了云的生产线
后端
星栈1 天前
从装一堆工具到看懂 Node 工程化思维:我的项目复盘记录
后端·node.js
65岁退休Coder1 天前
LangChain v1.3.4 笔记 - 05 Agent 上下文记忆
后端
颜酱1 天前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
JaneConan1 天前
鸿蒙 韶非 UI 系列:能力调用 startAbilityForResult,跳能力拿回参,鸿蒙能力路由入门
后端·harmonyos
晴空了无痕1 天前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
用户8356290780511 天前
如何使用 Python 在 Excel 中添加、编辑和删除超链接
后端·python
花椒技术1 天前
原本要 2 天的服务端冒烟前置审查,为什么 3 分半就能出报告?|QA 质量交付实践(三)
后端·ai编程·测试