基于 jasypt 实现spring boot 配置文件脱敏

前言

在项目构建过程中,保护敏感信息的安全性至关重要,为了提高系统的安全性能,我们采用了Jasypt来对配置文件中的敏感信息进行加密处理,以确保系统的机密信息不被轻易泄露。

步骤

  1. 添加Maven依赖

首先,我们需要添加Maven依赖,以引入Jasypt库:

java 复制代码
       <!-- jasypt 配置文件脱敏-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
  1. 创建加密解密工具类

编写解密工具类:

java 复制代码
package com.aq.common.utils;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * @Author ShipleyZeng
 * @Date 2023/10/1 16:39
 * @ClassName: JasyptUtil
 */
public class JasyptUtils {
    /**
     * Jasypt生成加密结果
     * @param password 配置文件中设定的加密盐值
     * @param value 加密值
     * @return
     */
    public static String encryptPwd(String password, String value){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryptor(password));
        String result = encryptor.encrypt(value);
        return result;
    }

    /**
     * 解密
     * @param password 配置文件中设定的加密盐值
     * @param value 解密密文
     * @return
     */
    public static String decryptPwd(String password, String value){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryptor(password));
        String result = encryptor.decrypt(value);
        return result;
    }

    public static SimpleStringPBEConfig cryptor(String password){
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        // 指定加密算法,这里使用了PBE(Password-Based Encryption)算法,采用MD5和DES算法。
        config.setAlgorithm("PBEWithMD5AndDES");
        // 设置密钥获取迭代次数
        config.setKeyObtentionIterations("1000");
        // 密钥池大小 1代表使用密钥池
        config.setPoolSize("1");
        // 加密提供程序的名称
        config.setProviderName("SunJCE");
        // 盐
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        // 加密后输出的数据类型
        config.setStringOutputType("base64");
        return config;

    }

    public static void main(String[] args) {
    	// 对密码123456加密
        String jasypt = encryptPwd("jasypt", "123456");

        System.out.println(jasypt);

		// 对得到的密文解密 运行成功
        String jasypt1 = decryptPwd("jasypt", "1DFRBJI+4S+SiCtcqK0IrA==");

        System.out.println(jasypt1);


    }
}
  1. 将得到的密文替换配置文件进行运行 我这边使用的是mysql数据库的密码加密
  2. 启动项目 结果发现报错了
  3. 原因是官方在 3.0.0 以后更改了加密算法,所以你不设置的话,使用网上的方法加密出来的密码启动就会报错(官方 issue:Failed to bind properties under 'spring.datasource.password' to java.lang.String` #154)
  4. 在配置文件当中加入下配置可以解决启动项目报错的问题
java 复制代码
# jasypt 密码加密配置
jasypt:
  encryptor:
    # 加密盐值
    password: jasypt
    # 加密算法设置 3.0.0 以后
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
  1. 调用本地的查询接口、访问数据库查询到了用户信息
  2. 在项目中配置Jasypt的参数(如加密盐值和加密算法),系统知道如何进行解密操作.Spring Boot会在启动过程中自动检测配置文件中使用ENC()标识的属性值,然后调用Jasypt进行解密。这是因为Spring Boot具有属性注入和解析的能力,可以在运行时检测并处理这些加密的属性。
相关推荐
考虑考虑8 小时前
JDK26中的Map.ofLazy
java·后端·java ee
云浪9 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
苏三的开发日记9 小时前
Docker 启动顺序优化(CentOS / Ubuntu)
后端
高频因子挖掘机11 小时前
同一交易日出现重复 K 线:去重前先确认时间、来源和粒度
后端·github·api
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源