在C中编写基本的基于LFSR的流密码加密模块后,我在通常的文本文件上尝试了它,然后在Windows中的.exe文件上尝试了。但是,在解密后,文件没有运行,给出了一个关于16位的错误。显然在解密时有些错误。或者是制作文件,以便如果我篡改他们的二进制代码它们会被破坏?
我在文本文件上检查我的程序,希望找到我的任何错误。但问题是,是否有人尝试在可执行文件上运行您自己的加密程序?他们对此有明显的答案吗?
答案 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
首先在内存中的字符串中执行此操作,以便将算法与文件处理代码隔离开来。 一旦你证明算法正确反转,你就可以对文件做同样的事情;正如其他人所说,你可能会遇到处理二进制文件的问题,这是一个常见的问题。