cryptography.py 768 B

123456789101112131415161718192021222324
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
  4. from cryptography.hazmat.backends import default_backend
  5. class WeChatCipher(object):
  6. def __init__(self, key, iv=None):
  7. iv = iv or key[:16]
  8. backend = default_backend()
  9. self.cipher = Cipher(
  10. algorithms.AES(key),
  11. modes.CBC(iv),
  12. backend=backend
  13. )
  14. def encrypt(self, plaintext):
  15. encryptor = self.cipher.encryptor()
  16. return encryptor.update(plaintext) + encryptor.finalize()
  17. def decrypt(self, ciphertext):
  18. decryptor = self.cipher.decryptor()
  19. return decryptor.update(ciphertext) + decryptor.finalize()