1.实验目的
(1)了解BMP图像文件格式
(2)了解利用BMP图像文件隐藏信息的原理
(3)掌握基于24位真彩色BMP图像的文件信息隐藏方法
2.实验内容
(1)在图像数据后隐藏信息
(2)文件头与图像数据之间隐藏信息
(3)BMP图像文件隐藏信息的检测
(4)在图像文件头和信息有的保留字段中隐藏信息
(5)灰度、二值图像的其他信息隐藏及检测(扩展)
3.实验原理
实验所使用的工具为:matlab2020a
针对文件结构的信息隐藏方法需详细掌握文件格式,利用文件结构块之间的关系或根据块数据和块大小之间的关系来隐藏信息。
BMP(Bitmap-File)图形文件是Windows采用的常见图形文件格式,要利用BMP位图进行信息隐藏首先需要详细了解BMP文件的格式,BMP图像文件结构比较单一而且固定,BMP图像由文件头、信息头、调色板区和数据区四个部分组成,而24位真彩色图像中没有调色板信息。24位真彩色BMP位图文件包括3部分。第一部分是BMP文件头。前2个字节是“BM”,是用于识别BMP文件的标志;第3、4、5、6字节存放的是位图文件的大小,以字节为单位;第7、8、9、10字节是保留的,必须为0;第11、12、13、14字节给出位图阵列相对于文件头的偏移,在24位真彩色图像中,这个值固定为54;19,20,21,22表示的是图像文件的宽度,以像素为单位;23,24,25,26表示的是图像文件的高度,以像素为单位。第二部分是位图信息头。从第29个字节开始,第29、30字节描述的是像素的位数,24位真彩色位图。该位的值位0x18;第三部分是数据区。从第55个字节开始,每3个字节表示一个像素,这3个字节依次表示该像素的红、绿、蓝亮度分量值。
在不影响图像正常显示情况下,可使用以下四种方法在24位真彩色BMP图像中隐藏信息。
在图像文件尾部添加任意长度的数据,秘密信息存放在文件尾部可以减少修改文件头的数据量,仅需修改文件头中文件长度的值即可。
在调色板或者位图信息头和实际的图像数据之间隐藏数据,如果将秘密数据放在文件头与图像数据之间,则至少需要修改文件头中文件长度、数据起始偏移地址这两个域的值。
修改文件头和信息头中的保留字段隐藏信息。
在图像像素区利用图像宽度字节必须是4的倍数的特点,在补足位处隐藏数据。
4.实验记录
(1)在实际的图像数据后隐藏数据
待隐藏的秘密信息文件名称为hidden.txt,xxx1.bmp为载体图像,将载体和秘密信息放置在同一个目录下,在Windows的MS-DOS方式下执行命令Copy xxx1.bmp /b + hidden.txt /a xxx2.bmp,其中参数/b指定以二进制格式复制、合并文件,参数/a以ASCII格式复制、合并文件。执行该命令后,生成一个新的xxx2.bmp文件,使用图像浏览工具浏览该文件发现与原始载体图像几乎完全相同,信息隐藏在baboon.bmp文件的尾部。
图1-1 生成隐藏信息的图片
从BMP图像的结构中可知,图像的3、4、5、6四个字节存放整个BMP图像的长度。使用该方法隐藏信息时,未修改图像文件的文件长度字节,通过比较文件的实际长度和文件中保存的文件长度,就可发现该图像是否隐藏秘密信息。
当图像隐藏信息后,如diff=11,表示隐藏11个字节的信息。因此要在图像中隐藏信息,需修改图像文件长度,也就是修改第3、4、5、6字节,如此例中需在图像中隐藏11个字节信息,需要将文件长度增加11。在Ultraedit中手工将第3个字节由原来的0x36(十进制的54),变为0x41(十进制的65),然后再运行上述程序,发现diff=0,表示图像隐藏并修改文件的长度后,通过该种方法无法发现图像中是否隐藏信息,同时使用图像查看工具打开图像文件,发现图像再视觉上和原图没有任何差别。
图1-2 图像隐藏11个字节信息
图1-3 图像修改前
图1-4 图像修改后
图1-5 修改完后diff=0
图1-6 修改前后图对比(右图为隐藏信息后)
(2)文件头与图像数据之间隐藏信息
在数据区开始之前隐藏信息,也就是在54和55个字节之间隐藏信息,隐藏的秘密信息从hidden.txt文件中读取,此种方法修改图像数据的偏移量和图像书的文件长度。
图2-1 hidden.txt文件
图2-2 隐藏hidden.txt文件的内容
图2-3 隐藏信息前
图2-4 隐藏信息后
图2-5 隐藏前后图片对比(右图为隐藏后)
(3)BMP图像文件隐藏信息的检测
在BMP图像中隐藏信息的时候一般都是通过修改文件的偏移量和图像文件中图像的长度来隐藏信息,但在BMP图像文件中,file_length=biwidthbiBytecountbiHeight+bfoffBits,其中biwidth,biheight表示图像文件的宽度和高度,bfoffBits表示文件头到实际位图图像数据之间的偏移量。
通过diff的不同来比较图像是否在结尾处隐藏了信息,此种方法不能检测对于修改偏移量的隐藏检测。
图3-1 检测文件隐藏了信息
(4)在图像文件头和信息头的保留字段中隐藏信息
BMP图像文件中有很多从不使用的保留字节,如7、8、9、10字节是保留的,必须是0,可在第7、8、9、10字节隐藏秘密信息。
图4-1 在保留字节隐藏信息
图4-2 隐藏信息前
图4-3 隐藏信息后
图4-4 保留字节隐藏信息对比图(右图为隐藏信息后)
(5)灰度、二值图像或其他图像信息隐藏及检测
LSB全称为 Least Significant Bit(最低有效位),是一种常被用做图片隐写的算法(在CTF中经常见到她的身影)。LSB属于空域算法中的一种,是将信息嵌入到图像点中像素位的最低位,以保证嵌入的信息是不可见的,但是由于使用了图像不重要的像素位,算法的鲁棒性差,水印信息很容易为滤波、图像量化、几何变形的操作破坏。
1) 信息嵌入部分
图5-1 将图片转换为灰度图
图5-2 经过代码将图转换为灰度图,并产生文件xxx3.bmp文件
图5-3 信息隐藏代码
图5-4 信息隐藏前后图片的对比
2) 信息提取部分
图5-5 信息提取代码,其中红框中内容为提出信息的文本
图5-6 查看生成的hid.txt文件,其中内容为我们所隐藏的信息
5.实验结论与建议
通过这个实验,了解了BMP图像文件格式,以及隐藏信息的原理,并可以通过在实际的图像数据后隐藏信息、文件头与图像数据之间隐藏信息和在图像文件头和信息头的保留字段中隐藏信息这三种方式对BMP图像进行信息隐藏。