zoukankan      html  css  js  c++  java
  • node js 小程序解密失败 乱码 Illegal Buffer

    node js解密代码 微信官方地址

    • 官方的解释
      1592538499_1_.jpg

    前端代码

    • 使用的是uni
    • 一定要尽量保证uni.login和获取用户信息wx.getWeRunData api一起请求,尽量避免在后台储存session_key
    uni.getProvider({
    						service: 'oauth',
    						success: function(res) {
    							console.log(res.provider)
    							if (~res.provider.indexOf('weixin')) {
    								uni.login({
    									success(res) {
    										if (res.code) {
    											code = res.code;
    
    											// #ifdef MP-WEIXIN
    											wx.getWeRunData({
    												async success(res) {
    													res.code = code;
    													const step = await getStep(res);//调用后台接口进行解密
    													
    												}
    											})
    											// #endif
    										} else {
    											console.log('登录失败!' + res.errMsg)
    										}
    									}
    								})
    							}
    						}
    					});
    

    后台代码

    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')
        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
    
  • 相关阅读:
    【如何使用翻译工具翻译网页】英语没过关的可以参考下。
    HTTP 请求报文和响应报文
    VIM+ctags+cscope用法
    Ubuntu下命令行访问网站
    mini_httpd的安装和配置
    堆排序(代码2)
    插入排序
    堆排序(代码1)
    快速排序
    Python中的控制流
  • 原文地址:https://www.cnblogs.com/shiazhen/p/13162305.html
Copyright © 2011-2022 走看看