如何实现自定义数据库账号密码加解密

背景

在实际的项目开发中我们有时候基于安全考虑需要在项目配置文件中对数据库账号密码做加密处理,这个时候我们就可以使用jasypt这个组件来实现。如果有些项目安全等级要求比较高,可能加密的算法需要自定义或者使用SM4国密算法来实现加解密,那么这个时候我们该如何使用jasypt这个组件来实现自定义算法加解密?

准备工作

首先我们需要引入jasypt组件,在pom文件中添加相关依赖

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

写好加解密算法,这个我们就以常用的SM4国密算法为例(为了方便直接将整个hutool引入,实际项目中可以按模块引入相关依赖)

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.8</version>
</dependency>

代码编写

SM4工具类代码

package com.example.springdemo.databaseEncryptor;import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.SM4;
import cn.hutool.crypto.symmetric.SymmetricCrypto;/*** Created with IntelliJ IDEA** @author kingMouse* @date 2023/8/31 09:39* Description: SM4工具类*/public class SM4Util {private static final SymmetricCrypto SM4_CONTEXT = new SM4(Mode.CBC, Padding.PKCS5Padding, "GJeeXX_B4dr7JWJW".getBytes(CharsetUtil.CHARSET_UTF_8), "Zkw_SdNoSsFT=568".getBytes(CharsetUtil.CHARSET_UTF_8));/*** 加密* @param plainTxt* @return*/public static String encrypt(String plainTxt){byte[] encrypHex = SM4_CONTEXT.encrypt(plainTxt);return Base64.encode(encrypHex);}/*** 解密* @param cipherTxt* @return*/public static String decrypt(String cipherTxt){byte[] cipherHex = Base64.decode(cipherTxt);return SM4_CONTEXT.decryptStr(cipherHex, CharsetUtil.CHARSET_UTF_8);}
}

提供一个名为jasyptStringEncryptor名称的Bean来替换jasypt默认的加解密算法

package com.example.springdemo.databaseEncryptor;import com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Created with IntelliJ IDEA** @author kingMouse* @date 2023/8/31 09:40* Description: 自定义数据库sm4加密器*/
@Configuration
@EnableConfigurationProperties(JasyptEncryptorConfigurationProperties.class)
public class SM4EncryptorConfig {@BeanStringEncryptor jasyptStringEncryptor(JasyptEncryptorConfigurationProperties properties){return new StringEncryptor() {// 加密@Overridepublic String encrypt(String message) {return SM4Util.encrypt(message);}// 解密@Overridepublic String decrypt(String message) {return SM4Util.decrypt(message);}};}
}

配置文件修改

将数据库账号密码使用我们代码中的SM4工具类进行加密,然后将加密后的字符串配置我们的配置文件中

注意要使用ENC()包裹起来,如果不使用ENC()包裹起来则不走加解密规则

spring.datasource.username=ENC(kLUMJ9z/cLqON680m4zalA==)
spring.datasource.password=ENC(n5zn71QTbr2WGC6puEJi8g==)

测试

启动项目访问接口进行数据库数据查询,验证能否正常将数据库中数据查询出来
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/96995.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Web安全基础》04. 文件上传漏洞

web 1&#xff1a;文件上传漏洞2&#xff1a;WAF 绕过2.1&#xff1a;数据溢出2.2&#xff1a;符号变异2.3&#xff1a;数据截断2.4&#xff1a;重复数据 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与工具只做简单介绍&#xff0c;其使用另见《安全工具录》…

给视频添加背景图片,让它们更具魅力!

想要让你的视频更加出彩吗&#xff1f;给它们添加背景图片是不错的选择&#xff01;但是&#xff0c;如何做到呢&#xff1f;不用担心&#xff0c;我们的视频剪辑高手可以帮助你轻松实现&#xff01;我们提供多种背景图片选择&#xff0c;你可以根据自己的喜好和需求进行选择。…

【MySQL学习笔记】(七)内置函数

内置函数 日期函数示例案例-1案例-2 字符串函数示例 数学函数其他函数 日期函数 示例 获得当前年月日 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-09-03 | ---------------- 1 row in set (0.00 sec)获得当前时分秒…

pnpm快速创建 Vue.js 项目(npm类似)

目录 pnpm 创建一个 Vue.js 项目 前提准备&#xff1a; 运行创建命令&#xff1a; 选择项目配置&#xff1a;&#xff08;按需选择&#xff09; cd 项目名&#xff1a;&#xff08;进入项目终端&#xff09; 安装项目依赖&#xff1a; 运行项目&#xff1a; pnpm 创建一…

Mapbox实现蒙版掩膜效果

成果图 原理 原理其实是利用geojson的polygon空心圆 理论上必须在coordinates里面&#xff0c;第一个坐标数组要是最外圈的&#xff0c;套住后面坐标数组&#xff0c;这样就可以实现空心圆的效果&#xff0c;但是实际上&#xff0c;如果两个坐标数组在拓扑关系是不相交的话也…

【100天精通Python】Day53:Python 数据分析_NumPy数据操作和分析进阶

目录 1. 广播 2 文件输入和输出 3 随机数生成 4 线性代数操作 5 进阶操作 6 数据分析示例 1. 广播 广播是NumPy中的一种机制&#xff0c;用于在不同形状的数组之间执行元素级操作&#xff0c;使它们具有兼容的形状。广播允许你在不显式复制数据的情况下&#xff0c;对不同…

I2C与I3C的对比

I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路&#xff0c;即I2C接口接上拉电阻 4.I2C总线运行速度&#xff1a;**标准模式100kbit/s&#xff0c;快速模式400kbit/s&#xff0c;快速模式plus 1Mbit/s&#xff0c;**高速模式…

IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决

springboot2版本换成springboot3之后&#xff0c;代码这里突然报红了&#xff0c; 首先要淡定&#xff0c;把原先Import的引入删掉&#xff0c;重新引入试试呢&#xff0c;是不是很简单哈哈。 原来&#xff0c;springboot3的路径是&#xff1a; import jakarta.servlet.http…

关于大模型参数微调的不同方法

Adapter Tuning 适配器模块&#xff08;Adapter Moudle&#xff09;可以生成一个紧凑且可扩展的模型&#xff1b;每个任务只需要添加少量可训练参数&#xff0c;并且可以在不重新访问之前任务的情况下添加新任务。原始网络的参数保持不变&#xff0c;实现了高度的参数共享 Pa…

【python】—— 函数详解

前言&#xff1a; 本期&#xff0c;我们将要讲解的是有关python中函数的相关知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;函数是什么 &#xff08;二&#xff09;语法格式 &#xff08;三&#xff09;函数参数 &#xff08;四&#xff09;函…

微信仿H5支付

仿H5支付是指一种模拟原生H5支付流程的非官方支付方式。这种支付方式通常是由第三方支付服务提供商开发和维护的&#xff0c;目的是为了绕过官方支付渠道的限制&#xff0c;如费率、审核等问题。然而&#xff0c;由于仿H5支付并非官方授权和认可的支付方式&#xff0c;其安全性…

【C语言】深度讨论使代码更严谨,更优雅的方式

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将从多个部分探讨如何写出更严谨&#xff0c;更优雅的代码。 &#x1f30f;该文章借鉴《高质量 C/C 编程指南》——…