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

本文详细介绍了24位真彩色BMP图像的结构,并探讨了四种在BMP图像中隐藏信息的算法,包括在文件尾部添加、信息头与数据之间、文件头保留字段以及像素区域隐藏数据。同时,提供了MATLAB实现这些方法的代码示例,展示了如何在不影响图像显示的情况下隐藏和检测信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


一、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=
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值