Как исправить код для успешного шифрования и дешифрования данных AES с использованием IV в Python?
Ошибка "Неверная длина IV (должна быть 16 байтов)" возникает из-за того, что в PyCrypto IV должна быть длиной в 16 байтов для AES шифрования. Для успешного шифрования и дешифрования данных AES с использованием IV в Python, вам необходимо убедиться, что ваш IV имеет правильную длину. Если вы получили IV из шифртекста, вам нужно его расшифровать, а затем использовать результат в качестве IV. Пример исправленного кода: ```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # Генерация случайного IV iv = get_random_bytes(16) # Генерация ключа key = b'0123456789abcdef' # Создание объекта шифра cipher = AES.new(key, AES.MODE_CBC, iv) # Шифрование данных plaintext = b'Hello, World!' ciphertext = cipher.encrypt(plaintext) # Дешифрование данных decipher = AES.new(key, AES.MODE_CBC, iv) decrypted_text = decipher.decrypt(ciphertext) print("Зашифрованный текст:", ciphertext) print("Дешифрованный текст:", decrypted_text) ``` Этот код генерирует случайный IV длиной 16 байтов, а затем использует его для шифрования и дешифрования данных. Важно помнить, что IV должен быть случайным и уникальным для каждого сообщения, чтобы обеспечить безопасность шифрования.
Да здравствует костылестроение!
Выкинул всякую ерунду, оставил возню с iv.
Копипастим строку числел с запятыми после IV (пофиг со скобками или без) и вставляем на запросenter iv :
from Crypto.Random import get_random_bytes import struct def StartEncrypt(): # Генерация случайного IV (Initialization Vector) iv = get_random_bytes(16) print(len(iv)) print(iv) # Вывод информации о результате шифрования print(f'IV: {struct.unpack("b"*len(iv), iv)}') def StartDeCrypt(): # IV, полученный при шифровании data = input("enter iv :") for item in ['(', ')']: data = data.replace(item,'') str_iv = tuple(map(int, data.split(','))) print(str_iv) iv = struct.pack('b'*len(str_iv), *str_iv) print(iv) print(len(iv)) StartEncrypt() StartDeCrypt()
16 b'?\x06\x8f\xe9\xde!\xa0\xa8\x07\xfc\xb9\x1b\xb2X\x1e\x96' IV: (63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106) enter iv :63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106) (63, 6, -113, -23, -34, 33, -96, -88, 7, -4, -71, 27, -78, 88, 30, -106) b'?\x06\x8f\xe9\xde!\xa0\xa8\x07\xfc\xb9\x1b\xb2X\x1e\x96' 16