java - 如何编辑文件以更改 md5 哈希而不损坏?

标签 java file-io hash md5

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

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

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

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

DOCX-同样的方法在这里不再起作用。在文本编辑器中打开的 docx 文件的二进制内容末尾添加一个空格(“”)会损坏该文件。

所以我需要的是:

  1. 用于修改 Office 文档的 Java 库:doc、docx、xls、xlsx、ppt、pptx。

  2. 仍然有一些文件类型需要更改 md5 哈希输出,但我认为它们在 java 中不可修改 - 例如,可执行文件等媒体文件。 那么,我怎样才能对这些文件执行我想要的操作呢?有没有一种方法可以“触摸”文件,更改 header 或其他内容并使其与未触摸的文件不同?

编辑: 好的,这就是动机 - 我想生成大量数据,正如我在这里所问的:How to produce massive amount of data?

在提出这个问题时,我得到的答案已经足够了,但并非没有。

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

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

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

所以我认为我应该使用我最终需要的所有文件类型的起始数据集,然后复制该数据集。

最佳答案

  1. java libraries for modifying office documents :doc, docx, xls, xlsx, ppt, pptx.

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

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

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

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

还要查找保留/未使用的字节 - 这很常见。但再说一遍 - 为什么?你一开始就这样做吗?

关于java - 如何编辑文件以更改 md5 哈希而不损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899203/

相关文章:

c# - 编程竞赛题目: Counting Polyominos

javascript - 这个 addon-sdk 实现期望什么作为访问插件文件系统的参数?

java - 从二进制文件(Java)读取数据?

java - 如何确定文件将被逻辑移动还是物理移动

java - java的hashCode()方法是如何工作的?

javascript - 如何在 JavaScript 中转换 MD5 密码的 Base64 编码

java - Spring security keycloak适配器承载配置

java - 如何让 Proguard 混淆 jar 文件中的 jar

ruby - 从数组中生成哈希 - 这是如何工作的?

java - 在 Java 中使用 SQLite 选择变量