信息隐藏 实验二 BMP 图像信息隐藏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 BMP 图像信息隐藏

一,实验目的

1,了解BMP图像文件格式

2,了解利用BMP图像文件隐藏信息的原理

3,设计并实现一种基于24位真彩色BMP图像的文件信息隐藏方法。

二,实验环境

1, Windows XP 操作系统

2, Ultra Edit 文本编辑工具

3, Matlab 7.1版本软件

4, BMP格式图片文件

三,实验原理

1,在图像文件尾部添加任意长度的数据,秘密信息存放在文件尾部可以减少修改文件头的数据量,仅需修改文件头中的文件长度的值即可。

2,在调色板或者位图信息头和实际的图像数据之间隐藏数据,如果将秘密数据放在文件头与图像数据之间,则至少需要修改文件头中文件长度、数据起始偏移地址这两个域的值。

3,修改文件头和信息头中保留字段隐藏信息。

4,在图像像素区利用图像宽度字节必须是4的倍数额特点,在补足位处隐藏数据。

四,实验过程

1,在实际的图像数据后隐藏信息

(1)将载体baboon.bmp和秘密信息hidden.txt放置在同一目录下,在Windows 的MS-DOS方式下执行命令copy baboon.bmp /b + hidden.txt /a baboon1.bmp,如下图所示:

图一 DOS界面

(2)生成的新图像baboon1.bmp,表面上看上去与原图像几乎完全一样

图二隐藏前后对比图

(3)在Ultra Edit看两幅图像的结构,发现有所差别。

图三 baboon.bmp

图四 baboon1.bmp

(4)在Matlab中通过比较文件的实际长度和文件中保存的文件长度,就可以发现该图像是否隐藏秘密信息。代码如下所示:

clc;

clear;

fid=fopen('baboon1.bmp','r');%读入伪装载体图像文件

[a,length]=fread(fid,inf,'uint8');%length是文件的实际长度

fclose(fid);

fid=fopen('baboon1.bmp','r');%读入伪装载体图像文件

status=fseek(fid,2,'bof');

fileb=fread(fid,4,'uint8');

filelength=fileb(1)*1+fileb(2)*256+fileb(3)*256*256+fileb(4)*25

6^3;

%文件图像中保存的文件长度

diff=length-filelength;

%diff表示隐藏的信息长度如果相同,表示图像没有隐藏任何信息

fclose(fid);

从Workspace中可以读出diff数据为8

图五 Workspace

(5)在Ultra Edit中手动修改文件长度,再运行上述程序,发现diff=0,表示图像隐藏并修改文件长度后,通过该方法无法发现图像有隐藏信息。

2,文件头与图像数据之间隐藏信息

(1)在数据区开始之前隐藏信息,也就是在54个和55个字节之间隐藏信息。代码如下所示:

clc;

clear;

wm=randsrc(1,300,[0 1]);%产生随机水印

fid=fopen('baboon.bmp','r');%读入载体图像文件

[a,length]=fread(fid,inf,'uint8');

fclose(fid);

msgfid=fopen('hidden.txt','r');%打开秘密文件

[msg,count]=fread(msgfid);

fclose(msgfid);

wa=a; %a为图像变为uint8类型后的一维矩阵

j=1;

wa(11)=54+count;%修改偏移量,其中count为7

wa(3)=wa(3)+count;%修改图像数据的文件长度

for i=55:61 %隐藏7位信息

wa(i)=uint8(msg(j,1));%隐藏密码信息

j=j+1;

end

for i=55:length

wa(i+7)=a(i);

end

figure;

wa=uint8(wa);

fid=fopen('watermarked.bmp','wb');

fwrite(fid,wa);

fclose(fid);

subplot(1,2,1);imshow('baboon.bmp');%显示原始图像

subplot(1,2,2);imshow('watermarked.bmp')%显示新图像

(2)从图像看,两幅没有什么区别

图六隐藏前后对比图

3,在图像文件头和信息头的保留字段中隐藏信息

BMP图像中第7,8,9,10字节是保留的,必须为0,所以可以在这四个字节中

隐藏秘密信息。下面代码即隐藏了0,1,2,3这四个信息。

clc;

clear;

wm=randsrc(1,300,[0 1]);%产生随机水印

fid=fopen('baboon.bmp','r');%读入载体图像文件

[a,length]=fread(fid,inf,'uint8');

fclose(fid);

wa=a;

%在BMP的7,8,9,10保留字中隐藏秘密信息0 1 2 3,ASCII值为)Ox30 Ox31 Ox32 Ox33

wa(7)=48;

wa(7)=49;

wa(7)=50;

wa(7)=51;

figure;

wa=uint8(wa);

fid=fopen('watermarked.bmp','wb');

fwrite(fid,wa);

fclose(fid);

subplot(1,2,1);imshow('baboon.bmp');%显示原始图像

subplot(1,2,2);imshow('watermarked.bmp')%显示新图像

相关文档
最新文档