2011-12-16 72 views
0

在C中编写基本的基于LFSR的流密码加密模块之后,我在普通的文本文件上尝试了它,然后在Windows中的.exe文件中尝试了它。但是,解密后文件没有运行,给出了16位的错误。显然有一些解密错误。还是制作文件,以至于如果我篡改它们的二进制代码,它们会被破坏?加密后,exe文件变得不可执行

我正在检查我的程序上的文本文件,希望找到我的任何错误。但是,这个问题有没有人试过在可执行文件上运行自己的加密程序?他们对此有明显的答案吗?

+1

正如你所说的暗示它对文本文件有效,_make确保以二进制模式打开输入和输出文件_(主要适用于windows和dos,因为unixes没有文本模式) – 2011-12-16 11:57:13

回答

5

可执行文件没有什么特别之处。他们显然是二进制文件,因此包含00字节和字节> 127。只要你的算法是二进制安全的,它应该可以工作。

使用十六进制编辑器比较原始文件和解密文件。看看他们有什么不同。

您收到的错误意味着您没有正确解密可执行文件头,因此解密错误必须已经影响到文件的前几个字节。

2

在解密中显然存在一些错误。一个EXE文件就像任何其他文件一样是一个字节,没有魔法。你只是可能遇到字节值,你不会在文本文件中。像零。

1

解密过程应该与其加密相反。换句话说,对于所有可能长度的所有可能字节值的所有输入X,Decrypt(Encrypt(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  

做到这一点,首先对内存的字符串,因此您可以隔离文件处理代码的算法。 一旦你已经证明算法正确反转,你可以对文件做同样的事情;正如其他人所说,你可能会遇到处理二进制文件的问题,这是一个常见的问题。