在信息网络化的今天,大量文件都是以电子文档的形式进行保存、传达的。由于电子文档具有可复制性与易传递性,在其带给我们便利的同时,又增加了其内容被盗取的可能性。针对这一问题,我们今天就给大家介绍一个新方法,将文字信息隐藏在24位真彩色BMP位图中来实现信息文件加密。

如何利用BMP文件的特殊结构对信息文件进行加密

一、利用BMP文件的特殊结构对信息文件进行加密基本思路

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各种图像绘制操作都是以BMP格式为基础的。

BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。这种位图格式把图形定义成由点(像素)组成的图案。

一个典型的位图文件可看成由4个部分组成:位图文件头(bitmap-fileheader)、位图信息头(bitmap-informationheader)、色彩表(colortable)和定义实际位图数据的字节阵列,其具体形式如下图所示:

如何利用BMP文件的特殊结构对信息进行加密

位图文件头包含关于这个文件的信息。如从哪里开始是位图数据的定位信息,位图信息头含有关于这幅图像的信息,例如,以像素为单位的宽度和高度。色表中有图像颜色的rgb值。对显示卡来说,如果它不能一次显示超过256种颜色,读取和显示。bmp文件的程序能够把这些rgb值转换到显示卡的调色板从而产生准确的颜色。

bmp文件可用每像素1、4、8、16或24位来为颜色信息编码,这个位数称作图像的颜色深度,它决定了图像所含的最大颜色数。一幅1-bpp(位每像素,bitperpixel)的图像只能有两种颜色。而一幅24-bpp的图像可以有超过16×106种不同的颜色。假使上图所示BMP文件的色深是256色,那么在它的实际位图数据中就是用每8位数据代表了位图上一个点的色彩值。bmp文件的位图数据格式依赖于每个像素颜色所用的编码位数。

对于一个256色的图像来说,每个像素占用文件中位图数据部分的一个字节。像素的值不是rgb颜色值,而是文件中色表的一个索引值。所以在色表中如果第一个r/g/b值是255/0/0,那么像素值为0,表示它是红色,像素值按从左到右的顺序存储,通常从最后一行开始。所以在一个256色的文件中,位图数据中第一个字节就是图像左下角的像素的颜色索引,第二个就是它右边的那个像素的颜色索引。如果位图数据中每行的字节数是奇数,就要在每行都加一个附加的字节来调整位图数据边界为16位的整数倍。

并不是所有的bmp文件结构都像上图所示的那样。例如,24-bpp(我们常说的24位真彩色)的位图文件就没有实际意义上的色表,像素值可直接表示rgb值,在24-bpp位图文件中只有“位图文件头”、“位图信息”与“实际位图数据”三个部分有实际意义,其中图像上每个点的色彩分别由图像文件“实际位图数据”部分中的三个字节,也就是24位来表示该点的rgb值,每个字节的值对应一种组成混合光的基色光(红色、绿色、蓝色)的强度,比如说,24-bpp位图中某个点的位图色彩数据是16进制数“00FF00”代表这个点发出的光的色彩是绿色光。

了解了24-bpp位图的这一特点后,我们就可以联想到既然对于24-bpp真彩色位图“实际位图数据”部分中的每一个字节的数值都代表位图上某一个点的一种基色光的强度,那么,在我们少量改变该值的情况下,对于我们人类肉眼的视觉是无法辨认这幅图像所发生的变化的。还用上文所举的例子:24-bpp位图中某个点的位图色彩数据是16进制数“00FF00”代表这个点发出的光的色彩是绿色光,如果我们把该点的位图色彩数据改为16进制数“01FE00”,那么,在我们看来该点所发出的光仍然是绿色的。可实际上,我们已经将某些信息文件保存在这个位图中了。

二、利用BMP文件的特殊结构对信息文件进行加密的步骤

有了以上基本思路就可以制定以下方案,将信息文件隐藏在24-bpp真彩色位图的图像中,其编程步骤是:

1、把机密文件的信息写到一个文本文件a.txt中去。

2、找到一个足够大的24-bpp的位图文件b.bmp。假如文本文件a.txt的文件大小是N字节,位图文件的“实际位图数据”部分的大小就必须大于8×N字节,因此,b.bmp文件的总长度就必须大于8×N+54字节(除去“实际位图数据”部分,24-bpp位图文件的文件头长度为54字节)。

3、将位图文件b.bmp的“实际位图数据”部分的每一个字节的末位数据都清除为零。

4、将文本文件中的数据按二进制的方式读取,最后,把这次读出的数据一位一位地附加到位图文件b.bmp“实际位图数据”部分的每一个字节的末位上去。

到此,我们就将一个文本文件的信息藏到了一个24位真色彩位图文件中去了,但同时我们还保证了我们的位图文件的可用,因为,我们只是改变了位图文件b.bmp“实际位图数据”部分每一个字节末位信息上的数据,这对位图文件原始图样的影响非常小。

这样就造成了在普通用户眼中b.bmp还是一个普通的图形文件,而对加密者而言,只要我们把b.bmp文件“实际位图数据”部分的每一个字节的末位数据读出,再把它写入到一个文本文件中去,我们就可以读出隐藏在图形文件b.bmp中的信息文件了。

小知识之BMP文件

BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。