收藏
回答

解密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
回答关注问题邀请回答
收藏

12 个回答

  • 永永永
    永永永
    2018-09-28

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



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



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

    2018-09-28
    有用 3
    回复 2
    • 林志华
      林志华
      2018-12-05

      然而并不行

      2018-12-05
      回复
    • Jar郭镜波
      Jar郭镜波
      2021-02-02
      在node环境是有用的,谢了
      2021-02-02
      1
      回复
  • 坚持
    坚持
    2019-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

    2019-06-24
    有用 2
    回复 1
    • 哆啦C梦
      哆啦C梦
      2019-07-25
      我是先调用的login接口,然后点击按钮儿授权, 但是解密出来还是报错呢。
      2019-07-25
      回复
  • 泰
    2018-04-27

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

    2018-04-27
    有用 1
    回复
  • swen
    swen
    2018-04-20

    先确保login在getUserDetail之前

    2018-04-20
    有用 1
    回复 4
    • 哆啦C梦
      哆啦C梦
      2018-12-31

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

      2018-12-31
      回复
    • 枫
      2019-03-14回复哆啦C梦

      请问哥们问题解决了吗

      2019-03-14
      回复
    • 哆啦C梦
      哆啦C梦
      2019-05-19回复

      换Python写的API了。

      2019-05-19
      回复
    • 2019-08-08
      先调用wx.login在去获取用户信息
      2019-08-08
      回复
  • 飘,,,,,
    飘,,,,,
    2021-10-22

    确实是的, 需要在onload的时候就获取code并且存起来。之后用户点击授权的时候,使用这个保存的code。这样就不会概率出现这种报错。

    2021-10-22
    有用
    回复
  • 考拉
    考拉
    2020-05-12

    问题还是存在的,有解决的办法吗?

    2020-05-12
    有用
    回复
  • 王腾(Jump T. Wong)
    王腾(Jump T. Wong)
    2019-04-18

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

    2019-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
      回复
    • AceWwww
      AceWwww
      2019-01-07回复장수연.(七七)

      请问,怎么解决的?

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

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

    2018-05-04
    有用
    回复

正在加载...

登录 后发表内容