ValueError:在ECB模式下,数据必须与块边界对齐

时间:2018-09-05 09:06:29

标签: python aes ecb

我正在尝试使用以下代码在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模式下阻止边界”。如果string是16的倍数,它会很好地工作。我不知道如何进行填充,去填充。我们该如何解决呢?请帮助

1 个答案:

答案 0 :(得分:0)

对于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))