微信小程序中的SM2加密

news/2024/7/20 2:36:20 标签: 微信小程序, 小程序

背景

项目在进行等保测试时,发现小程序部分接口通过修改接口参数可以获取到部分敏感信息,属于严重漏洞。为了减少代码改动工作量,考虑使用国密SM2对参数进行统一加密后,后端需要解密后再使用。同时考虑到部分响应数据内容过多,如果后端对响应数据也加密,前端解密时间过长影响体验,所以只针对了请求参数加密。

具体实现

一、小程序可配置安全鉴权

小程序>微信小程序官方提供了接口通信鉴权体系,使用了数据加密与签名的机制,防止数据泄漏与篡改,且具备不可否认性。开发者可在小程序管理后台 API安全模块,为应用配置密钥与公钥,以此来保障开发者应用和微信开放平台交互的安全性。

安全鉴权模式介绍:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/signature-verify.html

服务端api签名指南:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/api_signature.html

看完介绍后感觉非常麻烦,而且在社区看到好多加密解密时存在问题。为了减少工作量,尝试选择下面第二种方式。

二、使用sm-crypto

文档地址:https://www.npmjs.com/package/sm-crypto

官方提供了小程序移植版和 java 移植版,如有需要可以参考使用。但因之前项目在管理后台用过,所以就没看文档,直接复制的npm包源码。

官方介绍需要依赖npm构建,因为当前项目没用npm,且只需要SM2,就直接复制了SM2源码放在小程序中。

首先找到源码sm-crypto/src/目录下的sm2文件夹,复制出来放到小程序目录中

在请求拦截中统一进行参数加密操作

const sm2 = require('./sm2/index')

// 下面代码要放在请求拦截中

if (config.data) {
	const publicKey = `xxx`   //  提前调用sm-crypto生成的公钥,需要和后端配合好,保证后端私钥和公钥是一对
	const sm2Data = sm2.doEncrypt(JSON.stringify(config.data), publicKey, 1)  // config.data就是请求参数
	config.data = encodeURIComponent(sm2Data)
}

这样每次发出的请求参数都会被加密处理,后端接收到后进行对应的解密即可。


http://www.niftyadmin.cn/n/355371.html

相关文章

每日一题——三数之和(双指针)

每日一题 三数之和 题目链接 思路 解析函数原型 首先我们来看一下题目给的函数原型: int** threeSum(int* nums, int numsSize, int* returnSize, int**returnColumnSizes)题目要求我们返回一个二维数组,数组的行数代表着存在多少个满足条件的三元组&…

vue自动更新版本号

在项目中创建buildTime.js //npm run build打包前执行此段代码 let fs require(fs); //返回package的json数据 function getPackageJson() { let data fs.readFileSync(./package.json);//fs读取文件 return JSON.parse(data);//转换为json对象 } let packageData getPackag…

Vue是什么

Vue是一个JavaScript框架,用于构建用户界面。它是一个用于构建用户界面的渐进式框架,这意味着它具有较小的体积和较低的学习曲线,并且可以逐步添加到现有的项目中。Vue的核心库专注于视图层,并提供了指令、组件和模板等功能&#…

Linux中的 loop设备

loop设备是一种伪设备(pseudo-device),或者说是仿真设备。它可以使我们在类UNIX系统上像块设备一样访问一个文件。loop设备必须与一个文件进行连接,才能被使用。通过这种方式,文件可以被mount为块设备,并像…

弹性伸缩:云计算中的自动资源调度

弹性伸缩是什么?它又在云计算中是如何工作的? 随着云计算技术的不断发展,弹性伸缩作为其核心特性之一,越来越受到人们的关注。那么,弹性伸缩到底是什么呢?它又是如何工作的呢? 首先,…

文字转语音软件哪个好?安利三款2023宝藏配音软件

手机上面会有很多的语音转文字,就是你说话说了之后就会转成文字,那么反过来呢,文字转语音就没有那么好操作了,因为其中最关键的是配音上面,很多的配音看起来就不太正常,没有什么感情,就和机器人…

【fps系统重构】-观察cpu、memroy、io -iostat

当您使用iostat命令监控磁盘I/O情况时,可以查看以下指标: rrqm/s:每秒发生的读请求被合并的次数。如果该指标很低,说明读请求较少或未被合并,可能会导致磁盘I/O负载过重。wrqm/s:每秒发生的写请求被合并的…

蓝精灵协会:如何将传统 IP 融入 Web3

作者:Cedric Hervet,联合创始人,创意总监 我和许多项目合作过,并且担任了近 30 年的艺术总监和创意总监。我的方法一直是创造同质化的宇宙,把观众带入并使他们产生梦想。但我也曾系统地寻找过那份额外的感动&#xff1…