Пикрипто AES CBC - PullRequest
       62

Пикрипто AES CBC

0 голосов
/ 10 ноября 2018

Я написал некоторый код, используя библиотеку pycrypt, и, должно быть, я что-то делаю не так, но я не могу понять, что я делаю неправильно. Я могу (почти) дешифровать сообщения с неправильным вектором инициализации, хотя я верю, что следую их примеру.

from Crypto.Cipher import AES
import os
from string import ascii_letters

key, iv = os.urandom(32), os.urandom(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = ascii_letters
plaintext += ' ' * (-len(plaintext) % 16)  # Padding
ciphertext = cipher.encrypt(plaintext)

cipher = AES.new(key, AES.MODE_CBC, os.urandom(16))
text = cipher.decrypt(ciphertext)
# text[16:] = b'qrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ            '

Теперь, кроме первых 16 байтов расшифрованного текста, у вас все правильно расшифровано с совершенно случайным выбором IV. Может ли кто-нибудь помочь мне понять, где я иду не так?

1 Ответ

0 голосов
/ 10 ноября 2018

Это нормально для цепочки блоков шифра. При расшифровке CBC IV необходим только для восстановления первого блока открытого текста. Вычисление других блоков открытого текста фактически не включает IV. Вот диаграмма (источник: Wikimedia пользователь WhiteTimberwolf, общественное достояние):

CBC decryption diagram

...