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

springboot+vue前后端项目接口校验通信数据完整性

方案:使用国密SM3算法实现数字签名

服务端

maven的pom文件引用

		 <!-- 国密算法支持 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version></dependency><!-- https://mvnrepository.com/artifact/cn.hutool/hutool-crypto --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-crypto</artifactId><version>5.8.26</version></dependency>

编写SMUtils工具类

 /*** 生成hmcSm3十六进制摘要* @param data 数据* @param key 盐值*/public static String sm3Hash(String key,String data){HMac hMac = SmUtil.hmacSm3(key.getBytes(StandardCharsets.UTF_8));return hMac.digestHex(data);}

前端调用接口时,通过请求头传入校验签名,请求头header key自定义 例如:X-HMAC-SM3

    @PostMapping(value = "/updateUserInfo")public AjaxResult updateUserInfo(@RequestBody WhUser whUser){// 校验用户数据完整性String hmac = request.getHeader("X-HMAC-SM3");if (!StringUtils.hasLength(hmac)) {return AjaxResult.error("校验数据失败,请您刷新重试");}if (!SMUtils.sm3Hash(JSON.toJSONString(whUser)).equals(hmac)) {return AjaxResult.error("校验数据失败,请您刷新重试");}}

前端vue使用SM3加密,是否加盐,需要前后端约定

安装依赖包:npm install --save sm-crypto
引入:import { sm3 } from 'sm-crypto';加盐key:sm3(password.value,16进制的盐值)
//后端给的盐值
strToHex(str: string) {var hexCharCode = [];for (var i = 0; i < str.length; i++) {hexCharCode.push(str.charCodeAt(i).toString(16));}return hexCharCode.join('');
}不加盐key:sm3(password.value)

注意:如果出现签名不一致,主要java端json字符串和前端加密json字符串不一致导致,需要前后都根据属性key进行排序,对空属性进行清除操作即可

相关文章:

springboot+vue前后端项目接口校验通信数据完整性

方案&#xff1a;使用国密SM3算法实现数字签名 服务端 maven的pom文件引用 <!-- 国密算法支持 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version><…...

进程通信(IPC-Inter Process Communication)

进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断&#xff0c;信号提供了一种处理异步事件的方法&#xff0c;作为进程通信的一种机制&am…...

idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法

问题现象 今天同事喊我过去看一个问题&#xff0c;项目正常启动的时候没问题&#xff0c;debug模式就卡住了&#xff0c;很久不动。我推测是哪个断点导致的&#xff0c;一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决&#xff09; 1、View Brea…...

计算机缺失msvcp100.dll如何解决?教你5种简单高效的修复方法

在现代科技发展的时代&#xff0c;计算机已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用计算机的过程中&#xff0c;我们常常会遇到各种问题和困扰。其中之一就是计算机找不到msvcp100.dll文件。这个问题可能会给我们的生活和工作带来很多不便&#xff0c;下…...

对硬盘的设想2:纸存,硬指针,软指针

“纸存”是设想中的存储器&#xff0c;它只能改写两次&#xff1a;写一次&#xff0c;再改一次&#xff0c;然后就不能再动了。就像拿着钢笔在纸上写字一样&#xff0c;所以叫纸存。 硬指针P、软指针S S abcd S aPcdPx P aPcdPx S aycd ①一个软指针S&#xff0c;指向数据abcd…...

Python在股票交易分析中的应用:布林带与K线图的实战回测

引言 在股票交易的世界中&#xff0c;技术分析是投资者们用来预测市场动向的重要工具。布林带&#xff08;Bollinger Bands&#xff09;作为一种动态波动范围指标&#xff0c;因其直观性和实用性而广受欢迎。本文将通过Python代码&#xff0c;展示如何使用布林带结合K线图来分…...

现代密码学-认证、消息认证码

什么是单向散列函数 单向散列函数&#xff08;one way hash function&#xff09;&#xff1a;一个输入&#xff1a;消息&#xff08;message&#xff09;,一个固定长度的输出(散列值&#xff0c;hash value),根据散列值检查消息完整性(integrity) 单向散列函数也称为消息摘要…...

在Java中为什么对a赋值为10,在进行a++时还是等于10呢

首先我们看这样一组代码 public class demo1 {public static void main(String[] args) {int a10;aa;System.out.println(a);} } 结果&#xff1a;10不是在第二步有a操作吗&#xff1f;为什么还是10呢&#xff1f; a的执行步骤如下&#xff1a; 保存当前a的值&#xff08;即10…...

免费数据库同步软件

在信息化日益发展的今天&#xff0c;数据同步成为了企业和个人用户不可或缺的一部分。数据库同步软件作为数据同步的重要工具&#xff0c;能够帮助我们实现不同数据库系统之间的数据复制和同步&#xff0c;确保数据的一致性和完整性。本文将介绍几款免费数据库同步软件&#xf…...

如何轻松修改Windows远程连接的端口号

为了增强远程连接的安全性&#xff0c;最好修改默认的远程桌面协议&#xff08;RDP&#xff09;端口号。以下步骤将指导您如何修改Windows注册表中的端口设置&#xff0c;并相应地更新防火墙规则。 一、修改注册表中的端口号 打开注册表编辑器&#xff1a; 按下Win R键&#…...

Leetcode 54. 螺旋矩阵(二维数组移动坐标)

54. 螺旋矩阵 使用vis数组记录该位置是否已经被访问 定义一个int型dir来记录方向&#xff0c;0123分别代表右下左上 当越界或碰壁已访问的位置后&#xff0c;修改dir并计算下一个位置 否则根据原dir计算下一个位置 class Solution {public List<Integer> spiralOrder(i…...

深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例

前言 在次之前&#xff0c;我们已经做了图像加雾的一些研究&#xff0c;这里我们将从深度图的方法实现加雾展开细讲 图像加雾算法的研究与应用_图像加雾 算法-CSDN博客 接下来将要介绍如何使用深度图像生成雾效图像的方法。利用Synscapes数据集&#xff0c;通过读取EXR格式的…...

QT: 读写ini配置文件(实现qml界面登录,修改)

目录 一.功能介绍 二.暴露属性 三.指定INI文件的路径和格式。 四.登录操作 1.检查INI文件中是否含有登录信息&#xff1b; 2.读取存储的ID&#xff1b; 3.读取存储的密码; 4.成功返回1&#xff1b;失败返回2&#xff1b; 五.修改账号 1.检查INI文件中是否含有登录信…...

DevOps 安全集成:从开发到部署,全生命周期安全守护

目录 一、DevOps 安全集成&#xff1a;为什么要做&#xff1f; 二、DevOps 安全集成&#xff1a;如何做&#xff1f; 三、DevOps 安全集成的优势 四、DevOps 安全集成&#xff1a;一些最佳实践 五、DevOps 安全集成&#xff1a;未来展望 六、思考与建议 七、总结 DevOps…...

R语言数据分析15-xgboost模型预测

XGBoost模型预测的主要大致思路&#xff1a; 1. 数据准备 首先&#xff0c;需要准备数据。这包括数据的读取、预处理和分割。数据应该包括特征和目标变量。 步骤&#xff1a; 读取数据&#xff1a;从CSV文件或其他数据源读取数据。数据清理&#xff1a;处理缺失值、异常值等…...

重构大学数学基础_week04_从点积理解傅里叶变换

这周我们来看一下傅里叶变换。傅里叶变换是一种在数学和许多科学领域中广泛应用的分析方法&#xff0c;它允许我们将信号或函数从其原始域&#xff08;通常是时间域或空间域&#xff09;转换到频域表示。在频域中&#xff0c;信号被表示为其组成频率的幅度和相位&#xff0c;这…...

Shell以及Shell编程

Shell的任务 ①分析命令&#xff1b; ②处理通配符、变量替换、命令替换、重定向、管道和作业控制&#xff1b; ③搜索命令并执行。 内部命令&#xff1a;内嵌在Shell中。 外部命令&#xff1a;存在于磁盘上的独立可执行文件。 #&#xff01;/bin/bash #! 称为一个幻数&…...

从记忆到想象:探索AI的智能未来

引言 人工智能&#xff08;AI&#xff09;在信息处理、数据分析和任务自动化等方面展现了强大的能力。然而&#xff0c;在人类独有的记忆和想象力领域&#xff0c;AI仍然有很长的路要走。加利福尼亚大学戴维斯分校的心理学和神经科学教授查兰兰加纳特&#xff08;Charan Ranga…...

“安全生产月”专题报道:AI智能监控技术如何助力安全生产

今年6月是第23个全国“安全生产月”&#xff0c;6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日&#xff0c;国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。 随着科…...

【转】ES, 广告索引

思考&#xff1a; 1&#xff09;直接把别名切换到上一个版本索引 --解决问题 2&#xff09;广告层级索引如何解决&#xff1f; -routing、join 3&#xff09;查询的过程&#xff1a;query and fetch, 优化掉fetch 4&#xff09;segment合并策略 5&#xff09;全量写入时副…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...