小心!你看到的图像可能隐藏了重大机密。
你能从图片上看到如下机场地图么?不要怀疑,美国FBI真的就将这张地图信息隐藏到了上面的图片中。所以我们平时看到的图片,有可能隐藏了我们所不知道的重要信息。
今天,小白就将为大家讲解两种通过图像隐藏信息的方法。
图像末端隐藏技术
最低有效位技术
这些技术虽然微不足道且易于检测,但可以让小伙伴了解数字图像隐写技术有多简单。
图像末端隐藏技术
图像文件一般由两部分组成:头数据+图像数据。头数据部分可以包含与图像相关的元数据信息,如创建日期、作者、图像分辨率以及压缩图像时使用的压缩算法。常见的JPEGS、BMP、TIFF、GIF等图像格式都是采用这样的方式存储图像。了解这些格式,我们就可以简单的(指操作上)隐藏我们的数据。
让我们以JPEGS为例。此格式的文件结构如下:
我们发现,每个JPEG文件分别以SOI和EOI标记开始和结束。这意味着任何图像处理软件(如photoshop或gimp、任何互联网浏览器、操作系统附带的标准照片查看软件等)都只能读取两者之间的数据,而在EOI之后的数据将不会读取。
因此,可以在EOI标记后插入任何内容,如下所示:
将隐藏的消息将成为JPEG文件的一部分,并随此文件一起传输到任何地方,但任何标准应用程序都不会看到任何异常情况。因为它只会读取EOI之前的内容。
当然,如果在EOI后面放置了大量数据,文件大小将显著增加,便会引起怀疑——因此,在这种情况下,最好使用高分辨率的JPEG格式文件。因其本身文件较大,便将别人的注意力从隐藏的消息中移开。
如果你想亲自尝试这种隐写技术,请在计算机下载一个十六进制编辑器(如果你使用Windows,WinHex是一个很好的程序),搜索FF D9(它是EOI的十六进制版本),在该节标记后粘贴任何您想要的内容,并保存你的更改。你将注意到该文件会像任何其他JPEG文件一样被打开,隐藏的消息只是简单地被放在图像文件的顶部。
最低有效位技术
最低有效位(LSB)技术是一种非常灵活的,在图像中隐藏数据的方法,同时如果我们知道自己在寻找的内容的时候有很容易检测。
它的原理是这样一个事实:肉眼看不到像素颜色的微小变化。
假设我们正在对RGB颜色空间中的图像进行编码,每个像素的颜色由一定量的红色(R)、绿色(G)和蓝色(B)的组合表示。红色、绿色和蓝色的数量在0到255之间。因此,在这个颜色空间中,纯红色表示为(255,0,0)。
现在,在这个场景中,一台机器将以3个字节表示每个像素——红色、绿色和蓝色各一个字节。因为一个字节是8位(即8位1和0),所以每种颜色都将存储为如下所示:
上面表示的是红色,因为二进制的11111111是十进制中的255。
如果我们把255改成254,也就是把11111111改成11111110,会怎么样?我们会注意到红色的不同吗?绝对不会。把11111111换成11111100(255换252)怎么样?我们仍然不会注意到差异——特别是这种变化发生在单个像素上!
因为一个字节中的最后几个数字是无关紧要的,所以LSB就是在这里得到它的名字:最低有效位技术。
我们知道,每个字节的最后几个位可以被操作。因此,我们可以利用这种操作来留出每个像素的最后几位来存储隐藏的信息。
让我们来看一个例子。假设我们想隐藏像“SOS”这样的信息。我们选择使用ASCII格式对字母进行编码。在这种格式中,每个字符都有自己的二进制表示。我们的消息的二进制代码是:
我们现在要做的是将每个字符分割成两个比特对(例如,S有以下四个对:01、01、00、11),然后沿着多个像素依次排列这些比特对。如果我们的图像有四个像素,那么我们的信息编码方式是这样的:
注意每个字母都分布在两个像素上:一个像素编码前三对,下一个像素编码最后一对,很清晰明了。当然你可以选择每个像素使用超过2位来存储信息,但是使用更多的位数会使每个像素的变化变得容易察觉。