BMP图片隐写
BMP图片隐写
【实验目的】
了解BMP图像文件格式,了解利用BMP图像文件隐藏信息的原理,设计并实现BMP图像文件信息隐藏方法。
【实验环境】
matlab/python,*ultra* *edit编译工具*
【实验原理】
BMP(Bitmap-File)图形文件是Windows采用的常见图形文件格式,要利用BMP位图进行信息隐藏首先需要详细了解BMP文件的格式,BMP图像文件结构比较单一而且固定,BMP图像由文件头、信息头、调色板区和数据区四个部分组成,而24位真彩色图像中没有调色板信息。24位真彩色BMP位图文件包括 3 部分。 第一部分是BMP文件头。前2个字节是“BM”,是用于识别BMP文件的标志;第3-6字节存放的是位图文件的大小,以字节为单位;第7-10字节是保留的,必须为0;第11-14字节给出位图阵列相对于文件头的偏移,在24位真彩色图像中,这个值固定为54;19-22表示的是图像文件的宽度,以像素为单位;23-26表示的是图像文件 的高度,以像素为单位。第二部分是位图信息头。从第29个字节开始,第29~30字节描述的是像素的位数,24位真彩色位图。该位的值为0x18;第三部分是数据区。从第55个字节开始,每3个字节表示一个像素,这3个字节依次表示该像素的红、绿、蓝亮度分量值。
任务:
在不影响图像正常显示情况下,可使用以下四种方法在24位真彩色BMP图像中隐藏信息:
(1)在图像文件尾部添加任意长度的数据,秘密信息存放在文件尾部可以减少修改文件头的数据量,仅需修改文件头中文件长度的值即可。
待隐藏的秘密信息文件名称为hidden.txt,baboon.bmp为载体图像,将载体和秘密信息放置在同一目录下,在windows的命令行模式下执行命令:Copy baboon.bmp /b+hidden.txt /a baboonl.bmp(CMD中), 其中参数/b指定以二进制格式复制、合并文件,参数/a以ASCII格式复制、合并文件。将baboon.bmp 和 hidden.txt文件进行合并,并生成新的文件baboon1.bmp(名字可自定义),信息隐藏在baboon1.bmp文件的尾部(使用ultra edit可查看),而图像的3-6的四个字节存放整个BMP图像的长度,如果在末尾添加了隐藏信息,3-6字节没变,但实际长度变大,二者相比较就可以知道是否嵌入了隐藏信息。
要求:编写代码,比较两个文件(baboon.bmp和baboon1.bmp的文件的实际大小和保存文件大小(3-6字节),比较嵌入隐藏信息和未嵌入隐藏信息图片的差异),提交相关代码,图片(baboon.bmp和baboon1.bmp图片、在Ultra Edit中不同地方,实际长度和3-6字节保存的长度大小差异截图)
Tips:fid表示图片
[a,length]=fread(fid,inf,’uint8’); %读取图片中实际的字节数(大小)
status=fseek(fid,2,’bof’); %偏移2个字节,使首字节变成第三字节
fileb=fread(fid,4,’uint8’); %读取3-6字节
filelength=fileb(1)*1+fileb(2)*256+fileb(3)*256^2+fileb(4)*256^3 %通过3-6字节得到图片的大小
diff=length-filelength; %计算两者大小是否一致
(2)在调色板或者位图信息头和实际的图像数据之间隐藏数据,如果将秘密数据放在文件头与图像数据之间,则至少需要修改文件头中文件长度、数据起始偏移地址这两个域的值。 即54+隐藏字节长度,
要求:隐藏信息图片(自己学号)+ultraedit中二者的对比(不同部分的截图)+实际大小与3-6字节保存大小差异截图+提取水印+代码
Tips:
[a,length]=fread(fid,inf,’uint8’); %a是每bit的值,length是长度
wa=a;
wa(11)=54+count; %修改文件偏移
wa(3)=wa(3)+count; % 修改文件大小
for i=55:63
wa(i)=uint8(msg(j,1));%隐藏密码信息
disp(wa(i));
j=j+1;
end
for i=55:length
wa(i+9)=a(i);
end
(3)在图像像素区利用图像宽度字节必须是4的倍数的特点,在补足位处隐藏数据。
BMP 图像文件中有很多从不使用的保留字节,如 7、8、9、10 字节是保留的,必须为 0,可在第 7、 8、9、10 字节隐藏秘密信息。
要求同上(2);
二、stirmark软件的使用
将需要进行攻击测试的图像放在Media\Input\Images\Set1目录下,注意,这里只能使用bmp格式的图像,在profiles目录下可以看到****SMBsettings.ini****配置文件,可以对需要设定需要测试的文件目录和配置不同攻击方式的参数:
Test_PSNR:起始位0,终值为100;步进为50;
Test_AddNoise:起始位10,终值为50;步进为20;
Test_JPEG:质量因子15,25,35
Test_ConvFilter:使用高斯滤波
Test_SelfSimilarities 使用rgb色系,r,g通道,交换攻击
Test_RotationCrop:旋转角度为-5、0、75、10
Test_RotationScale;旋转角度为-5、0、75、10
熟悉stirmark软件,每一种选取1到2种进行实验。
【实验步骤】
1、BMP图像信息隐藏
方法一:
①将bmp图片与待隐藏字节同时置于同一文件夹下。
②使用cmd中Copy-Item对文件进行合并生成新文件。
③新图片与原图肉眼上观察并无差异。
④用十六进制编辑器打开两张图片,发现信息已经成功写入。
⑤用matlab分别计算两张图片实际长度和长度信息的差值,发现原图的diff值为0,而新图片的diff值为10。
方法二:
①编写代码并生成水印图片
Diff为0,但在UE中发现信息已经嵌入
方法三:
①编写代码并嵌入信息,打开UE查看信息。
2、Strimark使用
① 使用默认配置,运行StirMarkBenchmark程序
②进入输出目录查看结果
⑥使用strmark攻击测试实验步骤1中的水印图像baboonl.bmp
说明LSB攻击不抗JPEG攻击。
不抗PSNR攻击。
【实验代码】
diff检测
1 |
|
方法2:
1 |
|
方法3:
1 |
|