#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. Я печатаю с мобильного телефона, немного сложно получить правильное форматирование)