当前位置: 首页 > article >正文

springboot 项目对配置文件中的密码进行加密处理

目录

  • 说明
  • 步骤
    • 导入依赖
    • 导入加密解密工具类
    • 获取密文
    • 修改配置文件的内容

说明

spring boot 中的配置文件中往往以明文的方式存放一些账号密码,例如数据库连接密码、redis登录密码等。为了项目安全。我们需要将密码禁行加密处理,防止能直接看出明文的密码。

此处,加密配置文件中的数据库连接密码为案例。

步骤

导入依赖

在项目中引入以下依赖

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

这个依赖和spring boot整合后,整个项目中系统属性、命令行参数、环境属性、配置文件、自定义属性 等内容都存在加密属性,可以使用此依赖对指定内容进行加密处理。

导入加密解密工具类

在项目中导入以下工具类

import org.jasypt.util.text.AES256TextEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;
import org.jasypt.util.text.StrongTextEncryptor;

public class JasyptUtil {
	private static BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
	private static AES256TextEncryptor aes256TextEncryptor = new AES256TextEncryptor();
	private static StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor();
	/**
	 * 说明:
	 * 加密,使用des对称加密算法进行加密
	 * @param data 需要加密的明文内容 
	 * @param key des对称加密的密钥
	 * @return 返回加密后的密文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String encryptDES(String data, String key){
		textEncryptor.setPassword(key);
		return textEncryptor.encrypt(data);
	}
	
	/**
	 * 说明:
	 * 解密,使用des对称加密算法进行解密
	 * @param data 密文内容 
	 * @param key 密钥
	 * @return 返回解密后的明文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String decryptDES(String data, String key){
		textEncryptor.setPassword(key);
		return textEncryptor.decrypt(data);
	}
	
	/**
	 * 说明:
	 * 加密,使用AES256加密算法进行加密
	 * @param data 需要加密的明文内容 
	 * @param key 密钥
	 * @return 返回加密后的密文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String encryptAES256(String data, String key){
		aes256TextEncryptor.setPassword(key);
		return aes256TextEncryptor.encrypt(data);
	}
	
	/**
	 * 说明:
	 * 解密,使用AES256算法进行解密
	 * @param data 密文内容 
	 * @param key 密钥
	 * @return 返回解密后的明文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String decryptAES256(String data, String key){
		aes256TextEncryptor.setPassword(key);
		return aes256TextEncryptor.decrypt(data);
	}
	
	/**
	 * 说明:
	 * 加密,使用3des对称加密算法进行加密
	 * @param data 需要加密的明文内容 
	 * @param key des对称加密的密钥
	 * @return 返回加密后的密文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String encrypt3DES(String data, String key){
		strongTextEncryptor.setPassword(key);
		return strongTextEncryptor.encrypt(data);
	}
	
	/**
	 * 说明:
	 * 解密,使用3des对称加密算法进行解密
	 * @param data 密文内容 
	 * @param key 密钥
	 * @return 返回解密后的明文字符串
	 * @author 张小三
	 * @create 2024-09-12 11:59
	 * @verson 1.0.0
	 */
	public static String decrypt3DES(String data, String key){
		strongTextEncryptor.setPassword(key);
		return strongTextEncryptor.decrypt(data);
	}
 	
	/*
	* 使用main方法来测试获取加解密后的数据
	*/
	public static void main(String[] args) {
		// 例如:使用AES256的方式加解密
		// 此处我要加密数据库登录密码:root@sdfa122
		String pwd="root@sdfa122";
		// 自定义密钥key为:62015ab9-7d67-44bc-b30f-0363e91c7127
		String key = "62015ab9-7d67-44bc-b30f-0363e91c7127"
		
        String str = encryptAES256(pwd, key);
        System.out.println("加密结果:"+str);
        
		String decStr = decryptAES256(str,key)
        System.out.println("解密结果:"+decStr);
    }
}

获取密文

使用以上的工具类来获取需要加密的数据密文。
例如,我要加密数据库连接密码。则需要修改上面工具类中的main方法中的内容。然后执行一次main方法后,复制打印的加密结果的密文。

修改配置文件的内容

未使用加密前的配置文件中的数据连接配置如下:

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.83.143:3306/zhangTest?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true
      username: root
      password: root

使用加密后修改的配置文件结果如下:
说明:
1. 下面的qOorwz6OoyZTtiBJzaEGnGzCMapZ4M8wxgamZdUkPre3fk0Dxy9zRopZNFJQso4F 密文为工具类中的main方法执行后的结果。
2. ENC(密文) :为使用jasypt的格式。将main方法中的结果复制到括号中即可。

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.83.143:3306/zhangTest?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true
      username: root
      password: ENC(qOorwz6OoyZTtiBJzaEGnGzCMapZ4M8wxgamZdUkPre3fk0Dxy9zRopZNFJQso4F)

http://www.kler.cn/a/301839.html

相关文章:

  • go环境搭建
  • Qwen2.5-Coder-32B-Instruct Docker 部署openai接口
  • vue3 element el-table实现表格动态增加/删除/编辑表格行,带有校验规则
  • Redis下载历史版本
  • CentOS7.9 源码编译 FreeSWITCH 1.10.12
  • SpringBoot 应用出错 Comparison method violates its general contract!
  • 【生日视频制作】海底石碑雕刻AE模板修改文字软件生成器教程特效素材【AE模板】
  • C语言代码练习(第十八天)
  • Docker 之虚悬镜像
  • ERROR: Failed building wheel for cython_bbox | pip install cython_bbox 失败【解决方案】
  • linux下的Socket网络编程教程
  • CTK框架(十):PluginAdmin插件
  • Docker | 轻松管理容器:Portainer安装与使用指南
  • Stream API 如何使用
  • Vue3 el-switch @change事件在初始化时会自动调用问题
  • docker_快速部署flask架构下的web容器
  • redis群集的三种模式
  • MK 米客方德 TF 卡 —— 录音笔、领夹麦、电池门铃等设备的高效能、低功耗存储首选
  • 双线性插值算法
  • 19:I2C一:程序模拟I2C通信时序
  • [数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别
  • 配环境时的一些记录
  • 好看好听的小猪包扩音器,轻巧便携更好用,得胜E10上手
  • C++库之一:Loki
  • Python在音频传输中的应用实例解析
  • C# HttpClient 实现HTTP Client 请求