加密数据解密算法--python样例中存在一处bug
发布于 6 年前 作者 jqiao 9125 次浏览 来自 问答

官方提供的类 WXBizDataCrypt 中的方法decrypt存在一个字节转换的bug

import base64
import json
 
from Crypto.Cipher import AES
 
 
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)
 
        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:])]

大概19行的位置

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


json.loads()中应该是填写字符串


cipher.decrypt(encryptedData)返回的是字节,需要对字节进行字符串转换


转换后


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

回到顶部