原理简介
- 针对文件结构的信息隐藏方法需详细掌握文件的格式,利用文件结构块之间的关系或根据块数据和块大小之间的关系来隐藏信息。
- 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 的倍数的特点,在补足位处隐藏数据。
在实际的图像数据后隐藏信息
待隐藏的秘密信息文件名称为 hidden.txt, 1.bmp 为载体图像,将载体和秘密信息放置在同一个目录下
hiddent.txt内容:5005180130
在 Windows 的 MS-DOS 方式下执行命令 Copy 1.bmp /b + hidden.txt /a 11.bmp ,其中参数/b 指定以二进制格式复制、合并文件,参数/a 以 ASCII 格式复制、合并文件。
执行该命令后,生成一个新的 11.bmp 文件,使用图像浏览工具浏览该文件发现与原始载体图像几乎完全相同,信息隐藏在 1.bmp 文件的尾部。
从 BMP 图像的结构中可知,图像的 3、4、5、6 四个字节存放整个 BMP 图像的长度。使用该方法隐藏信息时,未修改图像文件的文件长度字节,通过比较文件的实际长度和文件中保存的文件长度,就可发现该图像是否隐藏秘密信息。
源代码 bmphide.m 如下:
clc;
clear;
fid=fopen('1.bmp','r'); %读入载体图像文件(源文件)
[a,length]=fread(fid,inf,'uint8'); %length是文件的实际长度
fclose(fid);
fid=fopen('1.bmp','r');
status=fseek(fid,2,'bof');
fileb=fread(fid,4,'uint8');
filelength=fileb(1)*1+fileb(2)*256+fileb(3)*256^2+fileb(4)*256^3;
%文件图像中保存的文件长度
diff=length-filelength;
%diff 表示隐藏的信息长度如果相同,表示图像没有隐藏任何信息。
fclose(fid);
隐写前diff值为0