收藏
回答

使用官方提供python demo解密 getPhoneNumber 数据时报错

你想反馈一个 Bug 还是 提一个需求?


如果是 Bug:


class WXBizDataCrypt:
   def __init__(self, appId, sessionKey):
       self.appId = appId
       self.sessionKey = sessionKey

   def decrypt(self, encryptedData, iv):
       # base64 decode
       sessionKey = base64.b64decode(self.sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)

cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
print('cipher is',str(self._unpad(cipher.decrypt(encryptedData))))

decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))

if decrypted['watermark']['appid'] != self.appId:
           raise Exception('Invalid Buffer')

return decrypted

def _unpad(self, s):
       return s[:-ord(s[len(s)-1:])]


json.loads 时报错:



也不能 decode('utf-8')




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

2 个回答

  • john
    john
    2018-07-23

    有时候成功,有时候就出现上述问题,而且频率还蛮高的,请官方尽快给出解答

    2018-07-23
    有用 1
    回复 1
    • Freax
      Freax
      2019-12-10
      能否给个示例,下面是我的写法,客户端,服务器端基本没改,我是好像随时都能看到出错得一样
      2019-12-10
      回复
  • 小程序开发者
    小程序开发者
    2018-12-28

    我也遇到类似问题。

    最终的原因是:有时候sessionKey 和 encryptedData + iv不一致时,会导致解码出现上面的错误。

    解决办法:确保(从code获取到的)sessionKey和 encryptedData + iv 是一致的,即是在sessionKey失效之前,以此获取到的sessionKey和encryptedData + iv,然后调用解密,就可以正常解密得到结果了。

    2018-12-28
    有用
    回复 1
    • Freax
      Freax
      2019-12-10
      能否给个示例,下面是我的写法,客户端,服务器端基本没改,我是好像随时都能看到出错得一样
      2019-12-10
      回复
登录 后发表内容