如何编辑文件来更改md5哈希而不会破坏?

时间:2012-01-17 17:44:51

标签: java file-io hash md5

我需要复制各种类型的文件,稍微更改它们,以便原始的md5哈希值与修改后的哈希值不匹配,但保持它们的可读性并且不会损坏。

TXT文件 - 这很明显。我只是在文件的末尾添加一个随机字符串。

PDF文件 - 我开始寻找一个java库来编辑pdf文件,但后来我不小心试图用notepad ++打开一个pdf文件,并想 - 为什么我不尝试添加一个随机字符串到底我在那里看到的不可读的内容。好吧,令我惊讶的是它有效并且文件没有损坏。

ZIP文件 - 我尝试过与pdf相同的操作,它也有效。

DOCX-同样的方法在这里停止了工作。在文本编辑器中打开的docx文件的二进制内容末尾只添加一个空格(“”)会破坏文件。

所以我需要的是:

  1. 用于修改office文档的java库:doc,docx,xl​​s,xlsx,ppt,pptx。

  2. 我还需要更改md5哈希输出的文件类型,但我不认为它们可以在java中修改 - 媒体文件,例如可执行文件等。 那么,我怎么能在这些文件上执行我想要的东西呢?有没有办法只是“触摸”文件,更改标题或其他内容,使其不相同?

  3. 编辑: 好的,这就是动力 - 我想在这里生成大量数据:How to produce massive amount of data?

    在那个问题的时候,我得到的答案已经足够了,但不是他们没有。

    1. 我需要数据不相同。成对的文件必须通过md5哈希测试失败。

    2. 我不能只生成随机字符串,因为我需要模拟真实文件和documnet。

    3. 我不能使用现有的数据转储,因为我需要包含各种文件类型的各种大小的这些数据集。我需要一些我将作为输入大小的东西,它会为我生成数据。

    4. 所以我想我应该使用我最终需要的所有文件类型的起始数据集,并且只复制这个数据集。

1 个答案:

答案 0 :(得分:2)

  
      
  1. 用于修改office文档的java库:doc,docx,xl​​s,xlsx,ppt,pptx。
  2.   

Apache POI用于修改MS Office文件。请注意,较新的格式(xlsxdocx等)只是包含XML的ZIP文件。解压缩它们并修改纯文本XML 也可以工作。

对ZIP文件也有同样的建议:尝试解压缩并修改最简单的文件。

但是你真正想要实现的目标是什么?请注意,在文件末尾随机附加一些字符串只是偶然。在其他计算机或其他版本的软件上,该文件可能被视为已损坏...

我建议您在文件外部存储一些元数据,而不是比较MD5或更深入地查看文件格式。文件中几乎总是隐藏着标题和各种元数据(MP3中的ID3标签,图像中的EXIF等)。修改它会更加安全。

还要查找保留/未使用的字节 - 它经常出现。但是再次 - 为什么?你是在第一时间做的吗?