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)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于 Spring Boot 项目配置文件,我们可以使用 Jasypt(Java Simplified Encryption)来加密明文密码。Jasypt 提供了一个简单的 API 来在代码加密和解密数据。以下是实现步骤: 1. 添加 Jasypt 依赖 在 pom.xml 文件添加 Jasypt 依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> ``` 2. 配置加密算法 在 application.properties 文件添加以下配置: ```properties jasypt.encryptor.algorithm=PBEWithMD5AndDES ``` 这里使用的是 PBEWithMD5AndDES 加密算法,可以根据需要选择其他算法。 3. 加密明文密码 使用 Jasypt 提供的 API 对密码进行加密。例如,我们想要加密密码为 "123456",可以使用以下代码进行加密: ```java import org.jasypt.util.password.StrongPasswordEncryptor; String password = "123456"; StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor(); String encryptedPassword = passwordEncryptor.encryptPassword(password); System.out.println(encryptedPassword); ``` 将加密后的结果(例如,"EBXzrCJLxKZUeMl6x1cF8Q==")复制到配置文件密码字段。 4. 解密密码 在代码可以使用以下方法解密加密后的密码: ```java import org.jasypt.util.password.StrongPasswordEncryptor; String password = "123456"; String encryptedPassword = "EBXzrCJLxKZUeMl6x1cF8Q=="; StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor(); boolean isPasswordCorrect = passwordEncryptor.checkPassword(password, encryptedPassword); System.out.println(isPasswordCorrect); ``` 这里的 isPasswordCorrect 变量将会是 true,表示密码正确。 通过以上步骤,我们就可以在 Spring Boot 项目安全地加密配置文件的明文密码了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张帅三代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值