如何在不影响内容的情况下增加文件的字节大小?

Cla*_*ild 2 png metadata macos

有没有办法在不破坏文件内容的情况下轻松、任意地增加文件的字节大小?例如,通过插入虚拟字节。我的用例的文件是 png 类型。

我在 OS X 上,但欢迎所有解决方案。

Gil*_*il' 19

根据定义,您问题的字面答案是否定的。文件的大小是其内容的长度。如果要更改大小,则需要更改内容。

但是,可能可以更改内容并获得等效内容具有不同大小的。这是否可能取决于文件格式以及您认为等效的内容。

例如,如果文件是 PNG 图像,并且您认为包含 PNG 图像的两个文件在显示图像相同的情况下是等效的,则可以通过在文件中添加(或加长)注释字段来使文件更大。例如与ImageMagick

convert old.png -comment 'This comment will be added to the image file, making it larger' new.png
Run Code Online (Sandbox Code Playgroud)

最大可移植评论大小为2GB(您可能会达到 4GB)。原则上可以放多条注释(或使用其他字段名),但不知道常用程序是否支持这个。

继续 PNG 图像的示例,许多程序接受包含有效 PNG 图像和额外内容的文件,就好像它只是没有这些额外内容的 PNG 图像一样。如果您附加尾随垃圾,那么许多程序仍然会接受图像:

cp old.png new.png
echo 'trailing garbage' >>new.png
Run Code Online (Sandbox Code Playgroud)

您可以使用该truncate命令轻松附加空字节以达到特定大小。请记住,生成的文件已被广泛接受,但从技术上讲,它是无效的,因此可能不会在任何地方都被接受。(它似乎适用于每个使用libpng或派生类的程序,而且这个库非常普遍,因此您很有可能使该文件起作用。)

  • @Schwern 对于稀疏文件仍然如此。稀疏只是文件系统的一个属性,它不存储一些空块,用户仍然可以正常看到整个文件。所以文件的大小仍然是其内容的长度,只是**磁盘上的大小**不同,就像透明压缩文件一样 (10认同)

Kar*_*aru 5

truncate命令有一个鲜为人知的选项,可以通过添加空字节来增加文件大小,除非您使用的是显式显示这些内容的编辑器,例如vim.

手册页中解释正确的语法,但通常,传递-s选项并给出您希望文件的大小-s 10k,或者添加一个“+”,如-s +10k以将那么多空字节添加到文件中。

添加的字节将插入到末尾。对于您的用例,正常查看时,这些空值在图像中将不可见。

  • @Tonny 考虑到多年来数据文件格式中的错误是如何被利用的,我犹豫是否将隐藏/意外问题的程序健全性检查文件称为“令人讨厌的”。 (9认同)
  • 某些应用程序可能仍会抱怨 PNG“无效”、“损坏”或“具有无关的额外数据”。在末尾添加额外的字节并不会真正使内容本身无效,但某些软件会检查 PNG 标头中记录的大小是否与实际文件大小匹配。Adobe PhotoShop 过去对此非常讨厌,根本拒绝加载图像。自从我使用 PhotoShop 已经有几年了。我不知道当前版本是否仍然这样做。顺便说一下,大多数其他图像格式也是如此。 (3认同)
  • @RobMoir 末尾的额外数据(在文件的实际有效载荷的结构之外)与文件的有效载荷部分中的格式错误的数据之间存在差异。对后者的健全性检查是必须的(以防止漏洞利用),但检查文件逻辑结尾之外的数据......一个正确编写的具有健全性检查的文件加载器,无论如何都不应该读取额外的数据,所以它不能做任何伤害。真正的危险在于有效载荷中的漏洞利用,导致加载器在图像之后读取/执行额外的数据。但只有当它被阅读。(这首先不应该发生。) (3认同)
  • @RobMoir 警告并让用户有机会在进一步检查文件之前取消是合理的。拒绝做任何事情是令人讨厌的:) (3认同)