为什么不更改文件中的少量字节会破坏文件?

时间:2012-08-11 13:29:45

标签: c# file corrupt corrupt-data

在C#中,我有一个ZIP文件,我希望通过XORing或Nulling其字节来破坏它。 (通过Nulling我的意思是使文件中的所有字节为零) 对其字节进行异或需要我首先将字节读取到字节数组,然后将数组中的字节与某个值进行异或,然后将字节写回文件。

现在,如果我XOR / Null全部(或一半)文件的字节,它会被破坏,但如果只是 XOR / Null一些字节,比如前几个字节(或文件任何位置的任意几个字节)它没有被破坏,我的意思是我仍然可以访问该文件,好像什么都没有happend。

mp3文件也发生了同样的事情。

为什么文件没有损坏? 并且有一种“快速”的方式,我可以用?

来破坏文件

问题是我正在处理的zip文件很大, 所以XORing / Null甚至一半的字节都需要几秒钟。

非常感谢你......:)

3 个答案:

答案 0 :(得分:2)

完全阅读所有文件,您可能会遇到阅读错误。

但是,当然,如果你想保留一些'秘密',请使用加密。

zip包含一个小标题,一个目录结构(一个结尾)以及各个文件之间。有关详细信息,请参阅Wikipedia

破坏第一个字节肯定会破坏文件,但它也很容易修复。读者将无法在最后找到目录块。

对最后一个块进行破坏具有相同的效果:读者会立即放弃,但它是可以修复的。

更改中间的字节会损坏1个文件。 CRC将失败。

答案 1 :(得分:1)

这取决于您尝试“损坏”的文件格式。它还取决于您尝试修改的文件的哪个部分。最后,这取决于您如何验证它是否已损坏。大多数文件格式都有某种类型的错误检测。

对你不利的另一件事是zip file format使用CRC algorithm for corruption。此外,目录结构有两个副本,因此您需要破坏它们。

我建议你在最后破坏目录structure,然后修改前面的一些字节。

答案 2 :(得分:0)

  

我可以用传递锁定zip条目,但我不希望任何人打开它并查看其中的内容

这听起来好像在寻找一种安全删除方法。如果您只是不想让某人阅读该文件,请将其删除。否则,除非你做一些极端的事情,比如用不同的值重复它十几次或者在它上面应用一些复杂的算法一百次,仍然有办法读取数据,即使格式是“腐败的”。 / p>

另一方面,打破一个文件只是为了阻止其他人按常规方式访问它,这似乎有点矫枉过正。如果它是一个zip,你可以阅读它(这里有很多问题来处理存档文件),用密码加密然后把它写回来。如果它是一种不同类型的文件,那么实际上有一百万种不同的问题和解决方案可用于加密,隐藏或以其他方式阻止对数据的访问。打破文件不是你应该做的事情,除非这是为了帮助测试某种un-zip-corrputing-program或类似的东西,但是你的评论意味着这是为了防止访问。也许更多关于你为什么要这样做的背景可以帮助我们提供更好的答案?