1 from Crypto.Cipher import AES
2 from binascii import b2a_hex, a2b_hex
3
4 """
5 pip install pycryptodome
6 """
7
8
9 class Cipher(object):
10 MODE = AES.MODE_CBC
11 DEFAULT_KEY = b"024ea589b1f070da"
12
13 def __init__(self, key: bytes = b"024ea589b1f070da"):
14 """key: 16位, 24位, 32位"""
15 self.DEFAULT_KEY = key
16
17 @classmethod
18 def encrypt(cls, text: str):
19 """这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用"""
20 cipher = AES.new(cls.DEFAULT_KEY, cls.MODE, cls.DEFAULT_KEY)
21 length = 16
22 count = len(text)
23 add = length - (count % length)
24 text += '\0' * add
25 return b2a_hex(cipher.encrypt(text.encode())).decode()
26
27 @classmethod
28 def decrypt(cls, text: str):
29 cipher = AES.new(cls.DEFAULT_KEY, cls.MODE, cls.DEFAULT_KEY)
30 plain_text = cipher.decrypt(a2b_hex(text))
31 return plain_text.rstrip(b'\0').decode()
32
33
34 if __name__ == '__main__':
35 cipher = Cipher()
36 text = cipher.encrypt('hello')
37 print(text)
38 print(cipher.decrypt('f9cca2bb60e577874271c538c6c06161'))