После шифрования исполняемый файл становится неисполняемым

После написания базового модуля шифрования потокового шифрования на основе LFSR на языке C я попробовал его на обычных текстовых файлах, а затем на.exe-файле в Windows. Тем не менее, после расшифровки его обратно файл не работает, выдавая некоторую ошибку о том, что он 16-разрядный. Видимо какая-то ошибка в расшифровке. Или файлы сделаны так, что, если я изменю их двоичный код, они будут повреждены?

Я проверяю свою программу на текстовые файлы в надежде найти какую-либо ошибку с моей стороны. Однако вопрос в том, пытался ли кто-нибудь запускать ваши собственные программы шифрования для исполняемого файла? Есть ли какой-нибудь очевидный ответ на это?

3 ответа

В исполняемых файлах нет ничего особенного. Они, очевидно, являются двоичными файлами и, таким образом, содержат 00 байты и байты>127. Пока ваш алгоритм является бинарно-безопасным, он должен работать.

Сравните исходный файл и расшифрованный файл с помощью hex-редактора. Чтобы увидеть, как они отличаются.

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

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

Процесс дешифрования должен быть обратным процессу шифрования. Другими словами, Decrypt(Encrypt(X)) == X для всех входов X, всех возможных длин, всех возможных значений байтов.

Я предлагаю вам создать тестовый набор, который будет выполнять некоторые попарные проверки со случайными данными, чтобы вы могли доказать себе, что эти два преобразования действительно взаимно компенсируют друг друга. Я имею в виду что-то вроде:

for length from 0 to 1000000:
 generate a string of that length with random contents
 encrypt it to a fresh memory buffer
 decrypt it to a fresh memory buffer
 compare the decrypted string with the original string     

Сделайте это в первую очередь для строк в памяти, чтобы вы могли изолировать алгоритм от кода обработки файлов. Как только вы докажете, что алгоритм правильно инвертируется, вы можете сделать то же самое для файлов; как уже говорили другие, у вас могут возникнуть проблемы с обработкой бинарных файлов, это распространенная ошибка.

Другие вопросы по тегам