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

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码)

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码)在政务、金融、电力等关键领域,数据在传输过程中不仅要保证机密性(不被窃取),还要保证完整性(不被篡改)。国密算法(SM2/SM3/SM4)作为国内标准,正被越来越多项目采用。本文将以一个真实项目中的前端代码为例,深入解析如何利用 SM2、SM4、SM3 实现一套完整的请求加密与数据完整性校验方案,并提供可直接复用的核心代码与实现思路。一、为什么需要“加密+完整性校验”?加密(SM4):保证数据不会被中间人看到,解决机密性问题。完整性校验(SM3):保证数据在传输过程中没有被篡改,解决防篡改问题。密钥安全交换(SM2):使用非对称加密安全传递对称密钥,避免密钥暴露。三者结合,形成了一套端到端的安全通信机制,即使在 HTTPS 之外也能提供额外保护。二、整体架构与数据流前端 后端 1. 生成 SM4 密钥(key)和 IV 2. 用 SM2 公钥加密 key 和 IV → 放入请求头 3. 用 SM4 加密业务数据 → 得到密文 body 4. 用 SM3 计算密文的哈希 → 放入请求头 5. 生成 timestamp + nonce,SM3 签名 → 放入请求头 6. 发送请求(头 + 密文body) 7. 用 SM2 私钥解密出 SM4 密钥 8. 校验 timestamp 和 nonce(防重放) 9. 用 SM3 校验密文完整性 10. 用 SM4 解密得到业务数据 11. 处理业务,返回响应(同样加密+完整性) 12. 收到响应,校验响应完整性,解密得到业务数据三、前端核心代码解析(基于 Axios 拦截器)以下代码来自真实项目,我将逐段解释其核心逻辑。3.1 国密库引入与配置import{sm4asSM4}from'gm-crypt'// 假设 smEncrypt 是一个封装了 SM2/SM3 的全局对象constsm3=smEncrypt.sm3说明:gm-crypt是 Node.js 环境下常用的 SM4 加密库;smEncrypt通常来自第三方国密 SDK,提供 SM2 加密和 SM3 哈希方法。实际开发中可根据技术栈选择对应的库(如sm-crypto)。3.2 生成随机字符串与签名头(防重放)/** 生成12位不重复随机字符串(用于 X-Nonce) */constgetUniqueNonce=()={const$chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'constarr=$chars.split('')for(leti=arr.length-1;i0;i--){constj=Math.floor(Math.random()*(i+1));[arr[i],arr[j]]=[arr[j],arr[i]]}returnarr.slice(0,12).join('')}/** 生成请求签名头 X-Timestamp、X-Nonce、X-Signature */constgetSignatureHeaders=()={consttimestamp=Date.now().toString()constnonce=getUniqueNonce()constsignature=sm3(timestamp+nonce)// SM3 签名return{'X-Timestamp':timestamp,'X-Nonce':nonce,'X-Signature':signature}}核心要点:时间戳 + 随机数拼接后做 SM3 哈希,得到签名。后端会校验时间戳是否在允许范围内(如5分钟),并检查 nonce 是否已被使用(需用 Redis 缓存),从而防止重放攻击。3.3 动态生成 SM4 密钥与 IV,并用 SM2 公钥加密constgetAesKey=function(len=32){const$chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'constmaxPos=$chars.lengthletkeyStr=''for(leti=0;ilen;i++){keyStr+=$chars.charAt(Math.floor(Math.random()*maxPos))}returnkeyStr}constaeskey=getAesKey().substring(0,16)// SM4 密钥(16字节)constaesiv=

相关文章:

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码)

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码) 在政务、金融、电力等关键领域,数据在传输过程中不仅要保证机密性(不被窃取),还要保证完整性(不被篡改)。国密算法(SM2/SM3/SM4)作为国内标准,正被越来越多项目采用。本文将以一个真实项目中的前端代码…...

别再直接`helm install`了!遇到API错误时,我的‘下载-解压-排查-安装’四步排查法

Helm安装避坑指南:四步排查法解决90%的部署问题 每次看到终端里飘红的Error: INSTALLATION FAILED提示,是不是感觉血压瞬间飙升?作为Kubernetes生态中最受欢迎的包管理工具,Helm虽然极大简化了应用部署流程,但各种API版…...

别再死磕ICEM了!用Fluent Meshing搞定旋转周期性网格,手把手教你从SpaceClaim到求解器

Fluent Meshing旋转周期性网格实战:从几何处理到求解验证 在计算流体动力学(CFD)领域,周期性边界条件的处理一直是叶轮机械、换热器等领域仿真的关键环节。传统工作流中,ICEM CFD常被视为网格划分的"黄金标准&qu…...

迭代优化实战:如何用SPIRAN ART SUMMONER一步步完善你的作品

迭代优化实战:如何用SPIRAN ART SUMMONER一步步完善你的作品 1. 理解SPIRAN ART SUMMONER的核心优势 SPIRAN ART SUMMONER不同于普通的图像生成工具,它将《最终幻想10》的美学理念深度融入AI生成过程。这个工具最独特的地方在于它的"迭代优化&quo…...

StardewXnbHack:突破《星露谷物语》资源限制的创新工具

StardewXnbHack:突破《星露谷物语》资源限制的创新工具 【免费下载链接】StardewXnbHack A simple one-way XNB unpacker for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/st/StardewXnbHack StardewXnbHack是一款专为《星露谷物语》设计的XN…...

时间空间限制和数据范围

在算法中,写对代码只是第一步,更快,时间更少,不溢出才是核心,如果没有考虑时间和空间的限制,就会导致TLE(超时)和MLE(内存超限)。一、时间空间限制时间限制:1…...

跨地域双活集群:分布式database TDengine异地多活的高可用部署指南

随着大型企业向全球化与云原生演进,传统的“同城主备”架构已经无法满足极端灾难(如地震、区域断网)下的业务连续性需求。“异地多活(Geo-Active-Active)”正成为现代顶级架构的终极目标。跨地域双活集群意味着分布在数…...

纸张计数显示装置:基于STM32与电容传感技术的高精度检测系统

纸张计数显示装置:基于STM32与电容传感技术的高精度检测系统 【免费下载链接】2019-Electronic-Design-Competition 【电赛】2019 全国大学生电子设计竞赛 (F题)纸张数量检测装置 (基于STM32F407 & FDC2214 & USART HMI&a…...

STM32F103C8T6上跑ThreadX:CubeMX配置避坑与MDK工程搭建全记录

STM32F103C8T6移植ThreadX实战:从CubeMX配置到MDK工程搭建的深度解析 1. 环境准备与工具链选择 在开始移植ThreadX之前,确保你的开发环境已经准备就绪。对于STM32F103C8T6这款经典的Cortex-M3内核MCU,我们需要以下工具: STM32Cube…...

如何用OpenLRC实现音频到多语言字幕的智能转换

如何用OpenLRC实现音频到多语言字幕的智能转换 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT,Claude等)来转录、翻译你的音频为字幕文件。 项目地址: https://gitc…...

【无标题】游昕游戏(安徽游昕网络科技有限公司) 是 2018 年成立于合肥的手游公司,主打 正版怀旧复刻、三端互通、零氪 / 散人友好 的长线运营模式

游昕游戏(安徽游昕网络科技有限公司) 是 2018 年成立于合肥的手游公司,主打 正版怀旧复刻、三端互通、零氪 / 散人友好 的长线运营模式,核心是传奇、奇迹、英雄年代、热血江湖等经典 IP 的官服复刻。一、公司基本信息全称&#xf…...

OpenCV图像缩放实战:从cv2.resize()参数选择到性能优化

1. 从零理解cv2.resize()的核心参数 第一次接触OpenCV的图像缩放功能时,我也被那一堆参数搞得头晕眼花。后来在项目中反复调试才发现,掌握这几个关键参数组合,就能解决90%的图片尺寸调整问题。先来看这个函数的基本结构: cv2.resi…...

Qwen3模型AE视频制作辅助:根据脚本自动生成分镜视觉预览

Qwen3模型AE视频制作辅助:根据脚本自动生成分镜视觉预览 1. 引言 如果你做过视频,尤其是那种需要精心设计分镜和视觉效果的片子,肯定有过这样的经历:脑子里有个很棒的想法,但要把这个想法变成一个个具体的镜头画面&a…...

RetinaFace效果实测:在低分辨率监控截图中仍保持92%以上关键点定位精度

RetinaFace效果实测:在低分辨率监控截图中仍保持92%以上关键点定位精度 想象一下,你手头有一张从老旧监控摄像头截取的模糊照片,人脸只有几十个像素点大小,还带着点运动模糊。你想从中精准定位出眼睛、鼻子和嘴角的位置——这听起…...

GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers

AI 编程已经不能说是“火”了,而是切切实实改变了程序员的工作方式(低情商:已经在抢程序员的工作了)。就拿博主我自己来说,作为一个在互联网摸爬滚打 10 年的“资深老兵”,过去半年里我也已经从手写代码转向…...

Linux用户与组管理及文件权限配置详解

Linux用户与组管理用户(user) 每个使用Linux系统的个体或进程都需要一个用户账户,系统资源访问的最小权限单元。root用户:UID0,拥有最高权限 系统用户:UID 1-999(通常用于服务进程) …...

Janus-Pro-7B实现简单编译器前端:词法分析与语法树生成演示

Janus-Pro-7B实现简单编译器前端:词法分析与语法树生成演示 最近在琢磨怎么把大模型的能力用到计算机科学的教学里,特别是编译原理这块。编译原理听起来挺唬人的,什么词法分析、语法树,很多同学一上来就被这些概念给绕晕了。传统…...

伏羲天气预报实时进度监控:Web界面日志输出与异常诊断方法

伏羲天气预报实时进度监控:Web界面日志输出与异常诊断方法 1. 系统概述 伏羲天气预报系统(FuXi)是复旦大学开发的15天全球天气预报级联机器学习系统,基于Nature npj Climate and Atmospheric Science发表的论文实现。这个系统通…...

1Panel面板最新前台RCE漏洞(CVE-2024-39911)

1Panel 是新一代的 Linux 服务器运维管理面板,用户可以通过 Web 图形界面轻松管理 Linux 服务器,实现主机监控、文件管理、数据库管理、容器管理等功能。且深度集成开源建站软件 WordPress 和 Halo. 0x1 测试版本 专业版 v1.10.10-lts 社区版 v1.10.10-lts 1panel/openrest…...

LLMs之Steering :《EasySteer: A Unified Framework for High-Performance and Extensible LLM Steering》翻译与解

LLMs之Steering :《EasySteer: A Unified Framework for High-Performance and Extensible LLM Steering》翻译与解读 导读:EasySteer 的核心意义是把 LLM steering 变成可用、可扩展、可落地的统一基础设施:它通过 vLLM 深度集成解决了速度瓶…...

Tetrazine-PEG5-SS-NHS ester,四嗪-五聚乙二醇-二硫键-琥珀酰亚胺酯,四嗪-PEG5-SS-NHS的介绍

Tetrazine-PEG5-SS-NHS ester 是一种多功能化学试剂,结合了四嗪(Tetrazine)、五聚乙二醇(PEG5)、可逆双硫键(SS)和活性 N-羟基琥珀酰亚胺酯(NHS ester)四个结构单元&…...

Java面试准备:Jimeng LoRA驱动的智能题库系统

Java面试准备:Jimeng LoRA驱动的智能题库系统 1. 引言:Java面试的痛点与解决方案 Java开发者面对技术面试时,常常陷入这样的困境:刷了上百道题,但遇到新问题还是无从下手;背熟了各种概念,但面…...

SC16IS752双通道UART扩展芯片详解:I²C/SPI驱动与FreeRTOS集成

1. SC16IS752芯片概述与工程定位SC16IS752是NXP(恩智浦)推出的一款双通道、IC/SPI总线接口的UART桥接芯片,属于SC16IS7xx系列的高性能成员。其核心价值在于将传统并行/串行UART外设的复杂时序控制逻辑完全硬件化,并通过标准IC或SP…...

CAD算审通:消防联动及报警逻辑全解析、规范要求及验收重点

对于消防工程师、施工人员及物业运维人员来说,消防联动控制逻辑、报警规范及验收要点,是日常工作的核心,更是保障消防安全的关键。一、消防联动控制逻辑详细说明 动作原因消防联动的核心是“先确认、后联动”,避免误动作、漏动作…...

OCPI开源电动汽车充电接口架构设计:实现跨运营商充电漫游的技术原理

OCPI开源电动汽车充电接口架构设计:实现跨运营商充电漫游的技术原理 【免费下载链接】ocpi The Open Charge Point Interface (OCPI) allows for a scalable, automated roaming setup between Charge Point Operators and e-Mobility Service Providers. It suppor…...

OpCore Simplify:黑苹果配置范式重构与自动化工程实践

OpCore Simplify:黑苹果配置范式重构与自动化工程实践 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源硬件兼容性领域,黑…...

CentOS 7升级glibc 2.34踩坑实录:从依赖安装到避坑指南

CentOS 7升级glibc 2.34实战指南:从工具链准备到疑难解决 1. 为什么需要升级glibc? 在CentOS 7默认环境中,系统自带的glibc版本通常为2.17,而现代软件开发工具(如Node.js 18、Python 3.10等)往往需要更高版…...

信息奥赛一本通—编程启蒙(3346:【例60.3】 找素数)

代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int a, b;cin >> a >> b;for (int i a; i < b; i) {if (i < 2) continue;bool flag true; for (int j 2; j * j < i; j) {if (i % j 0) {flag false;break; }}…...

Pixel Dimension Fissioner 自动化测试应用:生成测试用例与Mock数据

Pixel Dimension Fissioner 自动化测试应用&#xff1a;生成测试用例与Mock数据 1. 测试自动化的新选择 在软件测试领域&#xff0c;最耗时费力的环节往往不是执行测试&#xff0c;而是准备测试。测试工程师常常需要花费大量时间编写测试用例、设计边界条件、构造Mock数据。传…...

卡证检测矫正模型效果深度评测:对比传统OCR与深度学习方案

卡证检测矫正模型效果深度评测&#xff1a;对比传统OCR与深度学习方案 最近在做一个需要批量处理身份证、银行卡图片的项目&#xff0c;对市面上几种主流的OCR方案做了一轮比较深入的测试。说实话&#xff0c;之前用传统方法处理这类问题&#xff0c;经常被各种奇葩的图片搞得…...