如何在 jpg 或 gif 照片中隐藏信息?

Posted

技术标签:

【中文标题】如何在 jpg 或 gif 照片中隐藏信息?【英文标题】:How can you hide information inside a jpg or gif photo? 【发布时间】:2010-11-16 00:20:03 【问题描述】:

如何在不破坏图像的情况下在 jpg 或 gif 等照片文件中写入一些信息?当然没有在照片上显示它,因为整个想法是在任何人都无法检测到的照片文件中发送信息(在某种程度上提供安全/隐私)!

【问题讨论】:

请不要标记复合词。单独的“信息”对于这个问题来说是完全无用的标签;对此的技术术语是“隐写术”。请不要删除它。 en.wikipedia.org/wiki/Steganography 感谢您的提示,我以前不知道! :) 将信息存储在EXIF数据中。 【参考方案1】:

您可以将 gif 和 zip(您要隐藏的信息)连接到一个文件中。 GIF 从文件开头读取,而 zip 从文件末尾读取。

在 linux 中创建这样的文件:

$ cat file1.gif >> outfile.gif
$ cat file2.zip >> outfile.gif

生成的文件应该有 file1.gif 和 file2.zip 的大小,并且应该可以被任何 gif 查看器和 zip 文件处理程序打开。

【讨论】:

可能是隐藏信息的最简单方法 :) 但是如何检索它? 正如我所说,您可以使用任何可以处理 zip 文件并提取信息的标准存档器打开生成的文件(输出文件)。 上升。我只看了第一部分。我稍后会尝试 zip 部分。 这是 UNIX 特定的。我有一个 Windows 解决方案。 我也有一个 Windows 解决方案,但与 @SantoshKumar 不同的是,我想与您分享 ;-) copy /b "file1.gif"+"file2.zip" "outfile.gif"【参考方案2】:

我相信有很多方法。这是一个:

在照片中,颜色的细微变化通常肉眼无法察觉,或者即使注意到,也很容易被误认为图片质量存在缺陷。

举个简单的例子,假设您有一个灰度 GIF 图像,其中调色板按从白色到黑色的顺序排列,中间有平滑的灰色范围。我不确定您对图形文件格式了解多少,但在 GIF 中,每个像素有一个字节,每个可能的字节值都映射到某种特定的颜色。所以在这种情况下,我们可以说调色板#0=RGB(0,0,0),调色板#1=RGB(1,1,1),...调色板#255=RGB(255,255,255)。

然后你拍一张普通的、真实的照片。将您的秘密信息分解成单独的部分。将每个调色板索引号的最后一位设置为消息的连续位。

例如,假设原始照片的前八个像素是,例如,01 00 C9 FF FF C8 42 43。您的消息以字母“C”开头,ascii 代码 0110 0111。所以您更改最后一位第一个字节为 0,将字节从 01 更改为 00。您将第二个字节的最后一位更改为 1,将字节从 00 更改为 01。您将第三个字节的最后一位更改为 1。它已经是 1,所以这没有区别。等等,你最终得到的 8 个字节编码为 00 01 C9 FE FF C9 43 43。

颜色的变化非常微妙,以至于任何人都不太可能注意到图片。即使他们确实注意到了,除非他们有理由怀疑,否则他们很可能只是断定图片质量不够完美。

当然,没有什么说您必须为秘密消息使用每字节 1 位。根据您认为可以避免的质量下降程度,您可以每字节使用 2 位,或者每隔一个字节更改 1 位,等等。

当然,彩色照片也可以使用相同的技术:将每个 RGB 分量中的最后一位更改为每个像素编码 3 位,等等。

【讨论】:

【参考方案3】:

嘿,这种方法被称为隐写术。有了它,我们不仅可以在图像中隐藏消息,还可以在音频、视频和其他格式中隐藏消息。

这是一个名为 steganotool 的开源隐写术软件。该项目是一个开源隐写术工具,可用于在位图图像中隐藏和提取文本。

关于隐写术

图像中的隐写术

这种类型的隐写术对发现非常有效,并且可以用于多种目的。这些目的可以包括验证、隐藏消息和传输加密密钥。这种类型的隐写术最有效的方法通常是最低有效位方法。这仅仅意味着隐藏的消息将改变图片中字节的最后一位。通过改变最后一位,载体图像内该像素的颜色将相对没有变化。这可以防止消息被轻易检测到。隐藏信息的最佳图像文件类型是 24 位位图。这是由于文件大且质量高。

音频中的隐写术

在音频文件中,隐藏信息最突出的方法是低位编码方法。低位编码方法有点类似于图像文件中使用的最低有效位方法。机密信息附在文件末尾。低位编码的问题之一是人耳可以注意到它。如果有人试图隐藏信息,这可能是有风险的,因为它很容易被发现。扩频方法是另一种用于隐藏音频文件中信息的方法。这种方法的作用是向音频广播添加随机噪声。这种方法使信息能够在整个频谱中传播并保持隐藏在随机噪声下。在音频隐写术中看到的最后一种方法是回声隐藏数据。此方法旨在通过使用声音文件中自然出现的回声来隐藏信息。然后,可以将额外的声音添加到这些回声中,额外的声音是隐藏的信息。这是隐藏信息的充分方法,特别是因为它在某些情况下甚至可以改善原始音频文件的声音。

视频中的隐写术

视频中的隐写术基本上是在视频的每一帧中隐藏信息。视频中只隐藏了少量信息,通常根本不引人注意,但是隐藏的信息越多,它就会变得越明显。这种方法也很有效,但必须正确操作,否则会显示更多信息而不是隐藏。

文档中的隐写术

这基本上是在文档行尾添加空格和制表符。这类 隐写术非常有效,因为在大多数文本/文档编辑器中,人眼看不到使用的空格和制表符。

你也可以参考这个open source project

这个article 非常有用。

【讨论】:

【参考方案4】:

您可以在图像元数据中存储一些信息。事实上,数码相机就是这样“标记”他们制作的照片(相机型号、日期和时间、GPS 坐标等)。

这种数据格式称为EXIF(可交换图像文件格式)。有很多示例如何在编程语言中使用它。 Here'sJava 中的例子。

如果您想阻止用户读取这些数据,您可以以某种方式对其进行加密,但他们始终能够将其从您的图片中删除(例如通过在 Photoshop 中打开并使用另存为)。

【讨论】:

那么 PhotoShop 中的“另存为”会删除任何元数据吗?你知道可以编辑它的软件吗? 我认为 Photoshop 会用它自己的数据重写这些数据。我觉得 EXIF 编辑器有很多,比如我找到了免费软件 Quick EXIF Editor photo-freeware.net/quick-exif-editor.php 这个答案(虽然很好)与问题无关。 Exif 不会隐藏信息。 Exif 是元数据,而不是隐写术。 "Guillaume" 照片文件中还有其他可以隐藏数据的地方吗? 是的,如果您想在照片中隐藏数据,请查看有关隐写术的答案。前 2 个答案(目前)非常好。【参考方案5】:

如果您想在 jpeg 文件中隐藏数据(文本、其他图像等),您只需将其附加到文件末尾即可。查看图片时,您只会看到原始图片,您添加的数据将被忽略。

虽然不是隐藏数据的超级骗子方式,但这是隐藏另一个 jpeg 的好方法,就像任何人在记事本或十六进制编辑器中打开文件一样,他们可能不会注意到有两个 jpeg 而不是一个因为无论如何,第二张图片的结尾看起来就像第一张一样。

【讨论】:

【参考方案6】:

在 windows 中,您可以使用简单的命令来隐藏图像中的存档:复制 /b cat.jpg + Documents.rar cat_new.jpg。 然后使用例如 winrar 从存档中提取数据 ftom 图像。 但更好的方法是使用隐写术。 适用于 linux 和 windows 的简单程序:http://linux01.gwdg.de/~alatham/stego.html 使用这个程序,您将使用密码短语,没有它甚至没人会知道,您在图片中隐藏了一些数据))

【讨论】:

【参考方案7】:

gif 文件中的压缩数据是可变大小的块。每个块都以一个长度字节开始。通常这些块是255字节的数据(长度字节说255)除了最后两个块(最后一个是0)

但是您可以使用大小拼写出消息的块重新编码 gif 例如使用字符作为ASCII文本或字节1234代表00011011二进制数据,

对 gif 的字节频率分析显示少于预期的 255 个字节。 并且尺寸会比原图大,但图像看起来完全一样。

【讨论】:

【参考方案8】:

你不需要任何类型的高级工具来隐藏图像中的文件——你只需要知道一些基本的 DOS 命令……只需点击下面的链接,看看如何做到这一点(这是一个简短的描述图像隐写术):

https://www.youtube.com/watch?v=ox9ArqXtaWw&list=PLqEKOAKK4IbSTfDJZE_lH-DiOjOzZUczx&index=2

【讨论】:

以上是关于如何在 jpg 或 gif 照片中隐藏信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何压缩照片大小为100K以内

如何把动态jpg图片转成gif?

是否可以在 .jpg 中“隐藏”一个 .gif?

怎么把照片发到网上

文件夹里的照片怎么批量删除

怎么把AVI格式的视频转换成GIF图片?