WXBizDataCrypt.py 720 B

1234567891011121314151617181920212223242526
  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. sessionKey = base64.b64decode(self.sessionKey)
  10. encryptedData = base64.b64decode(encryptedData)
  11. iv = base64.b64decode(iv)
  12. cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
  13. decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
  14. if decrypted['watermark']['appid'] != self.appId:
  15. raise Exception('Invalid Buffer')
  16. return decrypted
  17. def _unpad(self, s):
  18. return (s[:-ord(s[len(s)-1:])]).decode('utf-8')