收藏
回答

encryptedData解码报错,如何解决?

微信小程序会对一些敏感数据加密,输出一个encryptedData,然后对其解析(官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法),里面提供了一个示例代码的下载,但拿来后直接调用运行,居然报错 ReferenceError: Buffer is not defined,这个Buffer为什么没定义呢?

回答关注问题邀请回答
收藏

2 个回答

  • 殷振伟(丁辛)
    殷振伟(丁辛)
    03-12

    我是复制了node文件,里面两个js文件,一个demo.js、一个WXBizDataCrypt.js,编译报错为 var sessionKey = new Buffer(this.sessionKey, 'base64'),WXBizDataCrypt.js代码如下

    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


    03-12
    有用
    回复
  • 大山
    大山
    03-12

    示例好几个语言,你用的哪个?里面的参数需要更换成你自己的,贴一下代码看看。

    03-12
    有用
    回复 8
    • 殷振伟(丁辛)
      殷振伟(丁辛)
      03-12
      我是复制了node文件,里面两个js文件,一个demo.js、一个WXBizDataCrypt.js,编译报错为 var sessionKey = new Buffer(this.sessionKey, 'base64'),WXBizDataCrypt.js代码如下
      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
      03-12
      回复
    • 大山
      大山
      03-12回复殷振伟(丁辛)
      npm install没有?
      03-12
      回复
    • 殷振伟(丁辛)
      殷振伟(丁辛)
      03-12回复大山
      弄过了,执行后就是这堆js文件喽?
      03-12
      回复
    • 大山
      大山
      03-12回复殷振伟(丁辛)
      你在哪执行的这段代码,node环境还是小程序环境?
      03-12
      回复
    • 殷振伟(丁辛)
      殷振伟(丁辛)
      03-12
      小程序环境,也就是新建一个page,然后在对应的js中调用,可以加下微信不,13454145058,谢谢
      03-12
      回复
    查看更多(3)
登录 后发表内容