WXBizDataCrypt.py 744 B

123456789101112131415161718192021222324252627
  1. import base64
  2. import json
  3. from Crypto.Cipher import AES
  4. class WXBizDataCrypt:
  5. def __init__(self, appId, sessionKey):
  6. self.appId = appId
  7. self.sessionKey = sessionKey
  8. def decrypt(self, encryptedData, iv):
  9. # base64 decode
  10. sessionKey = base64.b64decode(self.sessionKey)
  11. encryptedData = base64.b64decode(encryptedData)
  12. iv = base64.b64decode(iv)
  13. cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
  14. decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
  15. if decrypted['watermark']['appid'] != self.appId:
  16. raise Exception('Invalid Buffer')
  17. return decrypted
  18. def _unpad(self, s):
  19. return (s[:-ord(s[len(s)-1:])]).decode('utf-8')