matlab实现基于24位真彩色BMP图像的文件信息隐藏方法(实验内容) 您所在的位置:网站首页 怎样建立bmp图像文件 matlab实现基于24位真彩色BMP图像的文件信息隐藏方法(实验内容)

matlab实现基于24位真彩色BMP图像的文件信息隐藏方法(实验内容)

2023-06-19 09:31| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 一、24位真彩色BMP图像1.简介2.文件格式 二、算法(四种)三、matlab实现1.图像文件尾部添加信息2.位图信息头和实际图像数据之间隐藏数据3.BMP 图像文件隐藏信息的检测4.在文件头和信息头中的“保留字段”隐藏信息

一、24位真彩色BMP图像 1.简介

BMP是英语BitMap(位图)的缩写,是Windows系统中的标准图像文件格式,而且文件几乎没有压缩,因此信息完全。

首先,需要知道BMP文件里面的字节数据有四个部分,分别是:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)、定义位图的字节(即位图数据Data Body)阵列。但是对于我们现在要讨论的24位真彩的BMP文件来说,里面不存在彩色表,因此整个里面只剩下三个部分:文件头、信息头、字节阵列。

其次,24位的二进制代码可以表示 2^ 24 (2的24次方),也就是16,777,216种色彩。其中红(R)绿(G)蓝(B)各个通道分别占用8bit,它们各有2^8=256个等级。一般称24bit以上的色彩为真彩色,也有采用30bit、36bit、42bit的。

2.文件格式

24位真彩色BMP位图文件包括3部分。第一部分是BMP文件头。前2个字节是“BM”,是用于识别BMP文件的标志;第3~6个字节存放的是位图文件的大小,以字节为单位;第7~10字节是保留的,必须为0;第11~14字节给出位图阵列相对于文件头的偏移,在24位真彩色图像中,这个值固定为54;第19~22字节表示的是图像文件的宽度,以像素为单位;第23~26字节表示的是图像文件的高度,以像素为单位。第二部分是位图信息头。从第29个字节开始,第29、30字节描述的是像素的位数,24位真彩色位图,该位的值为0×18。第三部分是数据区。从第55个字节开始,每3个字节表示一个像素,这3个字节依次表示该像素的红、绿、蓝亮度分量值。 下图是一个24位真彩色BMP图像文件用16进制编辑器(FlexHEX)打开: 在这里插入图片描述 原图test.bmp如下: 在这里插入图片描述

二、算法(四种)

本算法在24位真彩色BMP图像文件中隐藏 .txt 文件,在不影响图像正常显示的情况下,可使用以下四种方法隐藏信息。 ①在图像文件尾部添加任意长度的数据,秘密信息存放在文件尾部可以减少修改文件头的数据量,仅需修改文件头中文件长度的值即可。 ②在位图信息头和实际的图像数据之间隐藏数据,如果将秘密数据放在文件头与图像数据之间,则至少需要修改文件头中文件长度、数据起始偏移地址这两个域的值。 ③修改文件头和信息头中的保留字段隐藏信息。 ④在图像像素区利用图像宽度字节必须是4的倍数的特点,在补足处隐藏数据。 以下对这四种方法进行实现。

三、matlab实现 1.图像文件尾部添加信息

注意:添加的信息可以是任意长度,需要修改文件头中“文件长度”字段的值。 ①将待隐藏的秘密信息文件名称为 hide.txt , test.bmp 为载体图像,将载体和秘密信息放置在同一个目录下。 在这里插入图片描述

②在 Windows 的 MS-DOS 方式下执行命令 Copy test.bmp /b + hide.txt /a new.bmp 其中参数/b指定以二进制格式复制、合并文件,参数 /a 以 ASCII 格式复制、 合并文件。执行该命令后,生成一个新的 new. bmp 文件。 在这里插入图片描述

③使用图像浏览工具浏览新生成的文件发现与原始载体图像完全相同,但打开二进制编辑器ultraEdit观察,发现信息隐藏在 new. bmp 文件的尾部。 在这里插入图片描述

④BMP 图像的结构中可知,图像的 3~6 字节存放整个 BMP 图像的长度。使用该方法隐藏信息时,未修改图像文件的文件长度字节,通过比较文件的实际长度和文件中保存的文件长度,就可发现该图像是否隐藏秘密信息。 用matlab运行如下代码:

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');%4代表有四个元素的列向量 filelength=fileb(1)*1+fileb(2)*256+fileb(3)*256^2+fileb(4)*256^3; %文件图像中保存的文件长度(理论长度) diff=length-filelength; %diff 表示隐藏的信息长度如果相同,表示图像没有隐藏任何信息。 fclose(fid);

原图像diff=0,说明没有隐藏任何信息: 在这里插入图片描述 隐藏信息后的图像diff=19: 在这里插入图片描述 当图像隐藏信息后,diff=19,表示隐藏 19 个字节的信息。要在图像中隐藏信息不被发现,需修改图像文件长度,也就是修改第 3~6 字节,将其增加 19。在 Ultraedit 中手工将第 3 个字节由原来的 0x36,变为 0x49。

在这里插入图片描述

再次运行上述脚本,diff=0,隐藏信息不易被察觉。 在这里插入图片描述

2.位图信息头和实际图像数据之间隐藏数据

注意: ①添加的信息可以是任意长度 ②至少需要修改文件头中文件长度、数据起始偏移地址这两个域的值。 在数据区开始之前隐藏信息,也就是在 54 和 55 个字节之间隐藏信息,隐藏的秘密信息从 hide.txt 文件中读取,hide.txt内容为0978433243,此种方法修改图像数据的偏移量和图像数据的文件长度。

clc; clear; wm=randsrc(1,300, [0 1]); % 产生随机水印 fid=fopen('test.bmp','r'); %读入载体图像文件 [a,length]=fread(fid,inf,'uint8'); fclose(fid); msgfid=fopen('hide.txt','r');%打开秘密文件 [msg,count]=fread(msgfid); fclose(msgfid); wa=a; j=1; wa(11)=54+count; wa(3)=wa(3)+count; for i=55:64 wa(i)=uint8(msg(j,1));%隐藏密码信息 j=j+1; end for i=55:length wa(i+10)=a(i); end figure; wa=uint8(wa); fid=fopen('new_2.bmp', 'wb'); fwrite(fid,wa); fclose(fid); imshow('new_2.bmp');

在这里插入图片描述

3.BMP 图像文件隐藏信息的检测 clc; clear; wm=randsrc(1,300, [0 1]); % 产生随机水印信息 fid=fopen('new_2.bmp','r'); %读入载体图像文件 [a,length]=fread(fid,inf,'uint8'); %文件图像实际长度 %fread()函数用于读取二进制文件,Inf 代表输出数据是列向量,文件中每一个元素对应一个值 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 %文件图像的理论长度 status=fseek(fid,18,'bof'); b=fread(fid,4,'uint8'); biwidth=b(1)*1+b(2)*256+b(3)*256^2+b(4)*256^3 status=fseek(fid,22,'bof'); b=fread(fid,4,'uint8'); biHeight=b(1)*1+b(2)*256+b(3)*256^2+b(4)*256^3; bfoffbits=54;%偏移量 biBytecount=3;%24 位真彩色图像为 3 fclose(fid); diff=length-filelength; 4.在文件头和信息头中的“保留字段”隐藏信息 clc; clear; fid=fopen('test.bmp','r'); %读入载体图像文件 [a,length]=fread(fid,inf,'uint8'); fclose(fid); wa=a; %在 BMP 的 7、8、9 保留字中隐藏秘密信息 twl ,ASCII 值为74 77 6C wa(7)=116; wa(8)=119; wa(9)=108; figure; wa=uint8(wa); fid=fopen('new_4.bmp', 'wb'); fwrite(fid,wa); fclose(fid); imshow('new_4.bmp');

注意: ①隐藏信息的长度受到限制。如,BMP图像的文件头中有四个字节的“保留字段”。 ②无需修改其他部分。 图像隐藏前后无区别: 在这里插入图片描述 但打开编辑器可以看到隐藏信息: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有