微信小程序中的SM2加密

这篇具有很好参考价值的文章主要介绍了微信小程序中的SM2加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

项目在进行等保测试时,发现小程序部分接口通过修改接口参数可以获取到部分敏感信息,属于严重漏洞。为了减少代码改动工作量,考虑使用国密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)
}

这样每次发出的请求参数都会被加密处理,后端接收到后进行对应的解密即可。文章来源地址https://www.toymoban.com/news/detail-516748.html

到了这里,关于微信小程序中的SM2加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sm2签名与sm4加密(三)

    二简单介绍了一下理论,三来简单说下sm2签名的实现, 首先因为openssl太复杂没搞懂,就去看gmssl的代码,gmssl的密钥结构体很简单,长这个样子: 很明显公钥是一个点由xy两个坐标组成,私钥是一个长串。 sm2签名过程可以大体上分成三步,生成公私钥——(交换密钥)——使

    2024年01月18日
    浏览(42)
  • 前端sm2国密加密解密

    1.下载国密包 2.获取后端的公钥 注sm-crypto使用BC库加解密前端密钥与后端密钥是两队,非常规的base64密钥 前端公钥需要在前面加04占位否则无法解密 3.前端使用公钥进行加密 生成的加密串加04方便后端解密 4.前端使用私钥解密

    2024年02月11日
    浏览(66)
  • 国密SM2前端加密解密示例

    目录 一、 安装sm2依赖 二、编写代码 1、data中绑定数据 2、公钥加密 3、私钥解密 4、按钮绑定一下,数据可见一下 三、完整代码 要改变的数据phone和过程数据copyphone,公钥publicKey和私钥privateKey 具体生成测试公钥私钥可参照SM2加解密 C1为65字节第1字节为压缩标识,这里固定为

    2024年02月03日
    浏览(70)
  • javascript实现SM2加密解密

    前提JavaWeb环境 前端代码 实现步骤 java

    2024年02月14日
    浏览(65)
  • SM2加密实现之JAVA方式

    如有问题,请私信。

    2024年02月10日
    浏览(43)
  • vue普通加密以及国密SM2、SM3、sm4的使用

    sm-crypto:https://www.npmjs.com/package/sm-crypto 1. SM2是非对称加密算法 它是基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密,用于替换RSA/DH/ECDSA/ECDH等国际算法。可以满足电子认证服务系统等应用需求,由国家密码管理局于2010年12月17号

    2023年04月09日
    浏览(45)
  • Java SM2加密相关实现与简单原理

            首先我们应该了解SM2加密的主要用途:数字签名、密钥交换和公钥加密等应用。以下为SM2加密的简单原理: 密钥生成:首先,生成一对公钥和私钥。公钥用于加密和验证签名,私钥用于解密和生成签名。 加密过程: 随机选择一个临时的非零整数k,计算椭圆曲线点

    2024年01月23日
    浏览(43)
  • OpenSSL 3.1.1 ECC 加密、解密、签名、验签(国密 sm2、sm3)

    openssl 3 默认废弃了 旧版本 (opessl 1.x) 的部分api 导致部分旧ecc 代码无法使用(可以通过配置编译选项打开) ,这里展示如何使用新接口用ECC 进行加密解密。 新接口是真的方便,基本上你都不需要懂啥密码学知识,对我们这种密码白痴来说太好了 头文件 生成密钥对 导出公

    2024年02月05日
    浏览(61)
  • 医保移动支付加密解密请求工具封装【国密SM2SM4】

    医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开发语各不相同,可能要有java的、c#的、python的、pb的、nodjs的、php的、还可能有Delphi的等。。。。很多开发语言

    2024年01月21日
    浏览(91)
  • java实现国密SM4的加密和解密方式(即时通讯的消息对话加密采用SM2还是SM4)

    1.对于即时通讯的消息对话加密采用SM2还是SM4更合适? 对于即时通讯的消息对话加密,建议采用SM4对称加密算法,而不是SM2非对称加密算法。 SM2主要用于数字签名和密钥交换,其加密速度比SM4慢,而且SM2不太适合对长消息进行加密,因为它只能对比较短的数据块进行加密,这

    2024年02月07日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包