from Crypto.Cipher import AES
class AES_CBC:
def __init__(self, key, iv):
self.key = key
self.iv = iv
self.mode = AES.MODE_CBC
self.blocksize = 16
def pad(self, b):
number_of_bytes_to_pad = self.blocksize - len(b) % self.blocksize
ascii_string = chr(number_of_bytes_to_pad)
padding_b = number_of_bytes_to_pad * ascii_string
padded_plain_text = b + padding_b.encode()
return padded_plain_text
def unpad(self, b):
return b[:-ord(b[len(b)-1:].decode())] # Raise Exception when Decode Error.
def encrypt(self, b):
generator = AES.new(self.key, self.mode, self.iv)
b = self.pad(b)
crypt = generator.encrypt(b)
return crypt
def decrypt(self, b):
generator = AES.new(self.key, self.mode,self.iv)
meg = generator.decrypt(b)
result = self.unpad(meg) # Raise Exception when Decode Error.
return result
if __name__ == '__main__':
aes = AES_CBC("0123456789abcdef".encode(), "0123456789abcdef".encode())
enc = aes.encrypt(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10')
dec = aes.decrypt(enc)
print(enc, dec)
b'Y\xb2O\xcf\x01\x97j\xca\xe9c\x98\x1b\xa6W=3j{f\x7f\x05\x9d\xd0\x9c\xd2\xdb\xbaS\x84\xdd\xec\xca'
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10'
要加密明文字符串的自己encode成bytes就可以了。
本程序中,key, iv, 加密出的内容,解密出的内容全部为bytes。
bytes才是最通用的。