#python #python-3.x #encryption #cryptography #aes
Вопрос:
Я играю в вызов CTF . Мне был предоставлен зашифрованный файл и код, используемый для шифрования, где я должен найти время, используемое для начальной переменной для расшифровки . Но я не могу расшифровать вывод из байтов в строку . Вот код, используемый в вызове CTF —
#! /usr/local/bin/python from Crypto.Cipher import AES from datetime import datetime import hashlib from time import strftime seed = str(datetime.now()) key = hashlib.sha256(seed.encode('utf-8')).digest() IV = 16 * 'x00' mode = AES.MODE_CBC encryptor = AES.new(key, mode, IV=IV) text = open('flag.txt', 'r', encoding='utf-8').read() text = text "0" * (16-len(text)) ciphertext = encryptor.encrypt(text) target = open('flag.enc.txt', 'wb') target.write(ciphertext) target.close()
А вот код, который я использовал для расшифровки —
#! /usr/local/bin/python from Crypto.Cipher import AES from datetime import datetime import hashlib import base64 from time import strftime seedOrg = '2021-07-06 03:16:51.' IV = 16 * 'x00' mode = AES.MODE_CBC with open('/home/teja_mxx/Desktop/CapStone/encDec/flag.enc.txt', 'rb') as f: encText = f.read() print(encText) for x in range(1): if len(str(x)) lt; 9: llen = len(str(x)) milli = ("0" * (9 - llen)) str(x) seed = seedOrg milli key = hashlib.sha256(seed.encode('utf-8')).digest() decryptor = AES.new(key, mode, IV=IV) decryptedText = decryptor.decrypt(encText) print(decryptedText.decode())
И я получаю эту ошибку . Как мне это решить ? Ошибка UnicodeDecodeError: кодек ‘utf-8’ не может декодировать байт 0xe1 в позиции 4: недопустимый байт продолжения
Комментарии:
1. Бессмысленные байты, возвращаемые при расшифровке с неправильным ключом, обычно не имеют допустимой кодировки UTF-8.
2. Вы пытались зашифровать с помощью известного исходного кода, а затем расшифровать с помощью своего кода, используя это конкретное начальное значение, чтобы проверить, работает ли ваша расшифровка в основном так, как ожидалось?
3. Да, @MichaelButscher . Я действительно пытался расшифровать шифрование с помощью известного семени . Он по-прежнему показывает ту же ошибку
4. Верно, значит, двоичное сравнение семян удалось?