ValueError: Данные должны быть выровнены по границе блока в режиме ECB - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь использовать шифрование AES 128 в режиме ECB со следующим кодом.

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. Я не знаю, как сделать padding, unpadding. Как мы можем решить это? Пожалуйста, помогите

1 Ответ

0 голосов
/ 14 июня 2019

Для 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))
...