Почему не получается расшифровать текст? >>> 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 выдает мусор вместо текста. ЧЯДНТ?
Проблема здесь заключается в том, что режим шифрования CFB (Cipher Feedback) нужно использовать правильно для корректного расшифровывания текста. В режиме CFB данные шифруются блоками, и исходный текст должен быть зашифрован и расшифрован с использованием одного и того же начального вектора (IV).
В вашем примере вы создаете два объекта AES с различными начальными векторами, что приводит к неправильной расшифровке текста. Решением этой проблемы будет использование одного и того же начального вектора для шифрования и расшифрования, а также проверка правильной длины текста перед расшифровкой.
Поэтому, перед тем как шифровать текст, убедитесь, что используете один и тот же начальный вектор для объектов AES. Возможно, стоит также обратить внимание на другие режимы шифрования, такие как CBC, который может быть более подходящим для ваших целей.
Проблема здесь заключается в том, что режим шифрования CFB (Cipher Feedback) нужно использовать правильно для корректного расшифровывания текста. В режиме CFB данные шифруются блоками, и исходный текст должен быть зашифрован и расшифрован с использованием одного и того же начального вектора (IV).
В вашем примере вы создаете два объекта AES с различными начальными векторами, что приводит к неправильной расшифровке текста. Решением этой проблемы будет использование одного и того же начального вектора для шифрования и расшифрования, а также проверка правильной длины текста перед расшифровкой.
Поэтому, перед тем как шифровать текст, убедитесь, что используете один и тот же начальный вектор для объектов AES. Возможно, стоит также обратить внимание на другие режимы шифрования, такие как CBC, который может быть более подходящим для ваших целей.