收藏
回答

解密encryptedData 出现Illegal Buffer



官方nodejs解密这段代码, 有一定的概率出现throw new Error('Illegal Buffer')

请问是什么原因,查了很久参数传送没问题。求官方给我回复,在线等,因为上线前遇到这个奇怪问题,见到论坛都有类似的问题 都没有解决的。!!!!!!


相关介绍:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

提供相关的真实数据方便官方帮忙查找下原因是什么:

var appId = "wxb52dabb4ae6c5e5f";
var sessionKey = "Av/kbm77la18Bo+vDfg9Hw==";
var encryptedData = "wtv8PmAjj/ht48phniECl6DlLjar8OuIC9ghKH6yyNmo6FzHQIKc4/Rf3BkvHdWgT62ogUvxjMkmVFUvOpkKpFMYZ5YFk6Nd3MghV8kdrWLuf5XnoqGLkFhI+LVTkhlbeGF3UQZCIn4N0wfnvbjnWTrdiUaqJRyMz7vh0xggRPL3PHcaIb5oyYrV349xsb4gyzeKPpTRC9ED3o4Yf+SPLExfdiTBnaZ1OaYsdqsVirgh60Z7OxTmXVUAsedbSJZ4z4+nJvbkE/63Twb/a8+64ByPhojwMSsqJru5mLFFIZ+LEf250K+sqfbMhvWnmAYdQLy0ZcSKKqXzFZMmZGa56V5IdRQc8jo4gYVzrhuxbynQghQcjpRYDLDdUUWn5alAg8ruQ6D7uM1qygGbluASixUR59w59UP2QGplgDOXCazC90NB/0ZokvrATObKXpixiUgMu+azL9pEUgCoi1mxaMp47mpl5zyGCAuDoG/54cQ=";
var iv = "7vXKt43CYsQwntPHIImz0Q==";



=================================



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


最后一次编辑于  2018-02-25
回答关注问题邀请回答
收藏

10 个回答

  • 坚持
    坚持
    06-24

    注意:


    在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

    -------

    在进入页面时先在onLoad里wx.login code 换到session_key然而存下来,当用户点击获取手机号时,把加密数据连同之前保存的session_key一起传给后端

    ----

    文档写的很清楚了

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

    06-24
    赞同 1
    回复 1
    • 坏时少爷
      坏时少爷
      07-25
      我是先调用的login接口,然后点击按钮儿授权, 但是解密出来还是报错呢。
      07-25
      回复
  • 永永永
    永永永
    2018-09-28

    demo是有问题的,其中var decoded = decipher.update(encryptedData, 'binary', 'utf8')



    decipher.update的第二个参数没有binary的写法,变为空字符就OK了。。。。。。。。。。。



    这样,var decoded = decipher.update(encryptedData, ' ', 'utf8')

    2018-09-28
    赞同 1
    回复 1
    • 林志华
      林志华
      2018-12-05

      然而并不行

      2018-12-05
      回复
  • swen
    swen
    2018-04-20

    先确保login在getUserDetail之前

    2018-04-20
    赞同 1
    回复 4
    • 坏时少爷
      坏时少爷
      2018-12-31

      我是调用获取用户手机号,没有调用getuserdetail嘛

      2018-12-31
      回复
    • 枫
      03-14回复坏时少爷

      请问哥们问题解决了吗

      03-14
      回复
    • 坏时少爷
      坏时少爷
      05-19回复

      换Python写的API了。

      05-19
      回复
    • 北之星
      北之星
      08-08
      先调用wx.login在去获取用户信息
      08-08
      回复
  • 王腾(Jump T. Wong)
    王腾(Jump T. Wong)
    04-18

    是不是需要先wx.login,再获取解密数据给后台解密。  如果先获取数据,再获得code,那这个code拿到的sessionkey就不对应上数据了?

    04-18
    赞同
    回复
  • 장수연.(七七)
    장수연.(七七)
    2018-11-21

    同问

    2018-11-21
    赞同
    回复
  • Welman
    Welman
    2018-06-24

    楼主,请问最后是如何解决问题的呢, 这边也是偶尔会出现这个问题, 特别是在第一次请求的时候。

    2018-06-24
    赞同
    回复 6
    • Welman
      Welman
      2018-06-24

        好像真的解决了,感谢!!

      2018-06-24
      1
      回复
    • 장수연.(七七)
      장수연.(七七)
      2018-11-21回复Welman

      你好,这个getUserDetail 和getUserInfo有什么关系

      2018-11-21
      回复
    • Welman
      Welman
      2018-11-27回复장수연.(七七)

      其实我也不太懂,一下好了,一下又出问题了, 不过现在已经没有分享回调了,这个功能无所谓了

      2018-11-27
      回复
    • 장수연.(七七)
      장수연.(七七)
      2018-11-29回复Welman

       

       我已经解决了,就是用的getUserInfo方法


      2018-11-29
      回复
    • 王超Ace
      王超Ace
      01-07回复장수연.(七七)

      请问,怎么解决的?

      01-07
      回复
    查看更多(1)
  • coder2017
    coder2017
    2018-05-04

    @楼主,请问这个问题是通过什么方案解决的?

    2018-05-04
    赞同
    回复
  • 泰
    2018-04-27

    这个最近频繁出现,官方有工程师可以跟进下,看下官网提供的 nodejs 解密源码是否有 bug 吗?

    2018-04-27
    赞同
    回复
  • swen
    swen
    2018-04-19

    求问

    2018-04-19
    赞同
    回复
  • Kyle
    Kyle
    2018-03-16

    同问

    2018-03-16
    赞同
    回复