6

我正在使用以下代码在 ECB 模式下尝试 aes 128 加密。

from Crypto.Cipher import AES
key = 'abcdefghijklmnop'
cipher = AES.new(key.encode('utf8'), AES.MODE_ECB)
msg = cipher.encrypt(b'hello')
print(msg.hex())
decipher = AES.new(key.encode('utf8'), AES.MODE_ECB)
msg_dec = decipher.decrypt(msg)
print(msg_dec)

但我收到“ValueError:数据必须与 ECB 模式下的块边界对齐”。如果字符串是 16 的倍数,它可以正常工作。我不知道如何进行填充,取消填充。我们如何解决这个问题?请帮忙

4

1 回答 1

7

对于paddingun-padding,您可以使用Crypto库的内置功能,以下是您问题的有效解决方案。

from Crypto.Util.Padding import pad, unpad
from Crypto.Cipher import AES
BLOCK_SIZE = 32 # Bytes

key = 'abcdefghijklmnop'
cipher = AES.new(key.encode('utf8'), AES.MODE_ECB)
msg = cipher.encrypt(pad(b'hello', BLOCK_SIZE))
print(msg.hex())
decipher = AES.new(key.encode('utf8'), AES.MODE_ECB)
msg_dec = decipher.decrypt(msg)
print(unpad(msg_dec, BLOCK_SIZE))
于 2019-06-14T07:08:40.787 回答