在一个 JPG 文件中添加随机数据会使其无法使用吗?

24
为了简化我的生活,我希望能够在我的程序处理一些jpg图像时在其末尾添加1到7个附加字符。这些是虚拟填充(填充物等-可能全部为0x00),只是为了使文件大小成为8字节的倍数进行块加密。
经过几次尝试,我发现一些程序对额外字符没有问题,它们出现在FF D9指定图像结尾之后 - 因此,文件格式定义得足够好,我添加的“损坏”不应该有影响。
如果需要,我总是可以稍后对文件进行后处理,但我的首选是做最简单的事情 - 让它们保持原样(我正在解密其他文件类型,它们不会介意,所以有一个特殊情况很烦人)。
我想,几年前所有关于隐写术的争论中,肯定有人在这里有所发言......
(每8个字节块进行加密处理,我不想保存预加密文件大小,因此将0x00附加到输入数据中,并在解码后将它们保留在那里)
4个回答

25

不会的,你可以在jpg文件末尾添加数据而不会导致文件无法使用。jpg文件头告诉程序如何读取它,因此读取它的程序将在jpg数据结束时停止。

事实上,人们通过在jpg数据末尾添加zip数据来隐藏zip文件在jpg文件中。由于这些格式的结构方式,所生成的文件在任何一种格式中都是有效的。


不可用(这是问题)与降低其可用性并不相同。这可能是一个微不足道的区别,但它非常重要,因为它可能是一个可行的解决方案。 - Stu Thompson
好的,我不确定说“不降低其可用性”是否意味着“使其无法使用”,但我会编辑一下以使其更加清晰。 - pkaeding

7
你可以..但结果可能是不可预测的。
尽管格式中有足够的信息告诉客户端忽略额外的数据,但程序员很可能没有测试过这种情况。
一个多疑的程序可能会查看大小,注意到差异,并决定不处理你的文件,因为显然它没有完全理解它。这在从网络读取数据时特别容易发生,因为文件中的随机字节可能被视为安全风险。

3
你可以将数据嵌入JPEG的XMP标签中(或者EXIF或IPTC字段中)。 XMP是XML,因此您有相当大的灵活性来执行自己的定制操作。
这可能不是“可能的最简单的事情”,但在这里放置您的数据将保持JPEG的完整性并且不需要“后期处理”。
然后,您的数据将显示在其他图像软件中,例如PhotoShop,但这可能并不理想。

0

正如其他人所说,您无法控制程序如何处理图像文件,因此有些程序可能会发现图像有效,而其他程序则可能不会。

然而,这里存在一个更大的问题。根据您的问题,我推断您正在实践“通过模糊来保护安全”的做法。这被广泛认为是一种非常糟糕的做法。使用谷歌搜索该主题的大量文章。


5
这是什么意思?我正在使用TEA算法来加密数据,但它一次只能加密8个字节。为了不在加密文件中包含元数据来告诉我原始数据的大小,我将原始数据填充到8字节边界,并保留填充的部分。 - Adam Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接