python3 AES-CBC-PKCS5Padding Crypto(pycryptodome) Bytes加解密实现

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才是最通用的。

Guess you like

Origin blog.csdn.net/uiop_uiop_uiop/article/details/112845727