加密后,exe文件变为不可执行文件

时间:2011-12-16 11:42:12

标签: c cryptography stream-cipher

在C中编写基本的基于LFSR的流密码加密模块后,我在通常的文本文件上尝试了它,然后在Windows中的.exe文件上尝试了。但是,在解密后,文件没有运行,给出了一个关于16位的错误。显然在解密时有些错误。或者是制作文件,以便如果我篡改他们的二进制代码它们会被破坏?

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

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

显然解密时出现一些错误。 exe就像任何其他文件一样只是一个字节,没有魔法。您可能只会遇到文本文件中无法获得的字节值。像零一样。

答案 2 :(得分: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     

首先在内存中的字符串中执行此操作,以便将算法与文件处理代码隔离开来。 一旦你证明算法正确反转,你就可以对文件做同样的事情;正如其他人所说,你可能会遇到处理二进制文件的问题,这是一个常见的问题。