from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import random
class CryptAes():
def __init__(self, key, iv,mode,pad_mode):
self.key = key
self.iv = iv
self.mode = mode
self.pad_mode = pad_mode
self.BS = AES.block_size
def encrypt(self, text):
pad_counts = self.BS-len(text)%self.BS
if pad_mode == 'zeropadding':
pad_character = chr(0)
else:
pad_character = chr(pad_counts)
pad_text = '{}{}'.format(text,pad_character*pad_counts)
cryptor = AES.new(self.key, self.mode, self.iv)
ciphertext = cryptor.encrypt(pad_text)
return b2a_hex(ciphertext).decode(encoding='utf8')
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.iv)
plain_text = cryptor.decrypt(a2b_hex(text)).decode(encoding='utf8')
return plain_text
if __name__ == '__main__':
key = '1234567812345678'
iv = "1234123412341234"
mode = AES.MODE_CBC
pad_modes = ['zeropadding','pkcs5padding','pkcs7padding']
pad_mode = random.choice(pad_modes)
text = 'hello world13233'
ca = CryptAes(key, iv,mode,pad_mode)
e = ca.encrypt(text)
d = ca.decrypt(e)
print('pad_mode: ',pad_mode)
print("加密:", e)
print("解密:", d)
输出结果
pad_mode: zeropadding
加密: 10712fdaa3bbf5471b34a9fad22f71cc589fba7da71d2be1599b09ea3146916d
解密: hello world13233