Как я должен реализовать вектор инициализации в коде CBC?

#python #aes #cbc-mode

Вопрос:

 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend


key = b'InformationSecurity M.Sc'
message =   b"""yeahcourse snake"""
IV = '000102030405060708090a0b0c0d0e0f'
aesCipher = Cipher(algorithms.AES(key),
                   modes.CBC(),
                   backend=default_backend())
aesEncryptor = aesCipher.encryptor()
aesDecryptor = aesCipher.decryptor()

    
message  = b"E" * (-len(message) % 16) # Padding to full blocks of 16 bytes 
ciphertext = aesEncryptor.update(message)

print("plaintext:",message)
print("ciphertext:",ciphertext.hex()) 
decryptedMessage = aesDecryptor.update(ciphertext)
print("recovered:",decryptedMessage)
 

Был режим ЕЦБ, но теперь хочет изменить его на режим CBC. Когда aes запускает код, в нем появляется следующее сообщение:

 TypeError: __init__() missing 1 required positional argument: 'initialization_vector'
 

Комментарии:

1. Пожалуйста, публикуйте всю обратную информацию, задавая вопросы.

Ответ №1:

Похоже, что все в значительной степени описано в документации: https://cryptography.io/en/latest/hazmat/primitives/symmetric-encryption/

Из документов следует, что это должны быть «режимы.CBC(IV)». Вы пропустили этот аргумент.

Комментарии:

1. Убедитесь, что вы приобрели указанный IV с помощью чего-то подобного os.urandom(16) ; неслучайный IV увеличивает риск утечки информации, если тот же IV будет использоваться с тем же ключом в будущем.

2. Алекс: Я бы предложил процитировать соответствующую информацию здесь; страницы со временем перемещаются, и вы хотите, чтобы ответ оставался актуальным/полезным, когда это произойдет.

3. Я печатаю с мобильного телефона, немного сложно получить правильное форматирование)