问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 微信小程序 Bug getPhoneNumber 客户端 6.7.3 2.3.0
- 当前 Bug 的表现(可附上截图)
有时候解密encryptedData 会出现Illegal Buffer
- 预期表现
不会出现Illegal Buffer
- 复现路径
概率事无法提供
- 提供一个最简复现 Demo
概率事无法提供
代码片段
var crypto = require('crypto') function WXBizDataCrypt(appId, sessionKey) { this.appId = appId this.sessionKey = sessionKey } WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) { // base64 decode var sessionKey = new Buffer(this.sessionKey, 'base64') encryptedData = new Buffer(encryptedData, 'base64') iv = new Buffer(iv, 'base64') try { // 解密 var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv) // 设置自动 padding 为 true,删除填充补位 decipher.setAutoPadding(true) // var decoded = decipher.update(encryptedData, 'binary', 'utf8') var decoded = decipher.update(encryptedData, '', 'utf8') decoded += decipher.final('utf8') decoded = JSON.parse(decoded) } catch (err) { throw new Error('Illegal Buffer') } if (decoded.watermark.appid !== this.appId) { throw new Error('Illegal Buffer') } return decoded } module.exports = WXBizDataCrypt
微信小程序开发问题解答
微信小程序开发者回答:
注意
在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
请检查 获取加密数据后是否调用过 wx.login
本文网址:http://www.91bianli.com/kaifazhinan/77759.html