После шифрования исполняемый файл становится неисполняемым - PullRequest
0 голосов
/ 16 декабря 2011

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

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

Ответы [ 3 ]

5 голосов
/ 16 декабря 2011

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

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

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

2 голосов
/ 16 декабря 2011

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

1 голос
/ 17 декабря 2011

Процесс дешифрования должен быть обратным процессу шифрования. Другими словами, 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     

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

...