欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 使用CryptoJS解决微信小程序用户信息解密

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:502

使用CryptoJS解决微信小程序用户信息解密

发布时间:2020-12-18  
微信官方有提供加密数据解密算法

接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法如下:

对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。

对称解密的目标密文为 Base64_Decode(encryptedData)。

对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。

对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。

微信官方提供了多种编程语言的示例代码(点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。

另外,为了应用能校验数据的有效性,我们会在敏感数据加上数据水印( watermark )

注:此前提供的加密数据(encryptData)以及对应的加密算法将被弃用,请开发者不要再依赖旧逻辑。

下载后发现,这里边居然没有纯 js 的 demo,好歹你自己家的小程序是只能用 js 哇。
 

使用CryptoJS解决微信小程序用户信息解密

找了网上好多文章,基本都是 Java 版本的解密,所以决定自己弄个纯js的。

干货:模仿 Node 的 demo,使用 CryptoJS实现纯 js 下解密用户信息

将 CryptoJS 的包放入 小程序的 utils 中(点击下载)

使用CryptoJS解决微信小程序用户信息解密

封装 RdWXBizDataCrypt.js

/** * Created by rd on 2017/5/4. */ // 引入CryptoJS var Crypto = require('cryptojs/cryptojs.js').Crypto; var app = getApp(); function RdWXBizDataCrypt(appId, sessionKey) { this.appId = appId this.sessionKey = sessionKey } RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) { // base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码 var encryptedData = Crypto.util.base64ToBytes(encryptedData) var key = Crypto.util.base64ToBytes(this.sessionKey); var iv = Crypto.util.base64ToBytes(iv); // 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充 var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7); try { // 解密 var bytes = Crypto.AES.decrypt(encryptedData, key, { asBpytes:true, iv: iv, mode: mode }); var decryptResult = JSON.parse(bytes); } catch (err) { console.log(err) } if (decryptResult.watermark.appid !== this.appId) { console.log(err) } return decryptResult } module.exports = RdWXBizDataCrypt  

在 app.js 中引入 RdWXBizDataCrypt

var WXBizDataCrypt = require('utils/RdWXBizDataCrypt.js'); var AppId = 'wx**************' var AppSecret = '8f***************************' App({ onLaunch: function () { }, getUserInfo:function(cb){ var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //调用登录接口,获取 code wx.login({ success: function (res) { //发起网络请求 wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data:{ appid:AppId, secret:AppSecret, js_code:res.code, grant_type:'authorization_code' }, header: { "Content-Type": "application/x-www-form-urlencoded" }, method: 'GET', success: function(res){ var pc = new WXBizDataCrypt(AppId, res.data.session_key) wx.getUserInfo({ success: function (res) { var data = pc.decryptData(res.encryptedData , res.iv) console.log('解密后 data: ', data) } }) }, fail: function(res) {}, complete: function(res) {} }); } }) } } })  

实现效果

使用CryptoJS解决微信小程序用户信息解密

附图:微信官方时序图

使用CryptoJS解决微信小程序用户信息解密