Почему не получается расшифровать текст? >>> bs = AES.block_size
>>> pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
>>> key = "password1234".encode() # to bytes
>>> aes_1 = AES.new(md5(key).digest(), AES.MODE_CFB, bytes([random.randint(0,0xFF) for i in range(16)]))
>>> aes_2 = AES.new(md5(key).digest(), AES.MODE_CFB, bytes([random.randint(0,0xFF) for i in range(16)]))
>>> d_text = pad("texttexttexttext blablablah")
>>> e_text = aes_1.encrypt(d_text)
>>> aes_1.decrypt(e_text)
b'\n\xce\x85\xeb\x8aK-\xd6\xbe\x9e\xafj;\xf9\x1e. blablablah\x05\x05\x05\x05\x05'
>>> aes_2.decrypt(e_text)
b'texttexttexttext blablablah\x05\x05\x05\x05\x05'
Вопрос: почему aes_1, которым текст был зашифрован, не смог этот текст расшифровать, а aes_2 смог? Все кроме начального вектора у них одинаковое, т.е что-бы расшифровать текст - IV нужно рандомизировать? Почему тогда нигде об этом не написано? Или так плохо читал/гуглил?
UPD: погугил еще, почитал о режимах подробнее, понял почему не получается расшировать, попробовал еще раз - теперь и aes_1 и aes_2 выдает мусор вместо текста. ЧЯДНТ?

21 Авг 2019 в 07:14
294 +1
0
Ответы
1

Проблема здесь заключается в том, что режим шифрования CFB (Cipher Feedback) нужно использовать правильно для корректного расшифровывания текста. В режиме CFB данные шифруются блоками, и исходный текст должен быть зашифрован и расшифрован с использованием одного и того же начального вектора (IV).

В вашем примере вы создаете два объекта AES с различными начальными векторами, что приводит к неправильной расшифровке текста. Решением этой проблемы будет использование одного и того же начального вектора для шифрования и расшифрования, а также проверка правильной длины текста перед расшифровкой.

Поэтому, перед тем как шифровать текст, убедитесь, что используете один и тот же начальный вектор для объектов AES. Возможно, стоит также обратить внимание на другие режимы шифрования, такие как CBC, который может быть более подходящим для ваших целей.

20 Апр 2024 в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир