25

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

4

8 回答 8

48

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

在 linux 中创建这样的文件:

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

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

于 2009-08-01T10:51:53.610 回答
30

我敢肯定有很多方法。这是一个:

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

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

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

例如,假设原始照片的前 8 个像素是 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 位,等等。

于 2010-02-15T17:56:53.957 回答
9

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

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

关于隐写术媒体

图像中的隐写术

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

音频中的隐写术

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

视频中的隐写术

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

文档中的隐写术

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

也可以参考这个开源项目

这篇文章可能非常有用。

于 2012-08-21T02:01:33.667 回答
4

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

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

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

于 2009-08-01T08:26:49.940 回答
2

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

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

于 2012-03-14T04:22:19.663 回答
1

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

于 2015-01-29T11:27:11.770 回答
1

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

但是您可以使用大小拼写出消息的块重新编码 gif,例如使用 ASCII 文本的字符或1 2 3 4表示00 01 10 11二进制数据的字节,

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

于 2017-03-15T23:43:31.643 回答
0

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

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

于 2014-04-02T18:13:31.247 回答