我正在尝试使用以下代码在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的倍数,它会很好地工作。我不知道如何进行填充,去填充。我们该如何解决呢?请帮助
答案 0 :(得分:0)
对于padding
和un-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))