3.1 信息的嵌入
信息嵌入是把待隐藏信息加入到掩护媒体中。其一般流程如图1所示:
输入 生成
要隐藏的信息m-----隐藏算法func------隐藏信息的伪装媒体b
↓
掩护媒体a
图1 信息嵌入的一般流程
上述流程可以用式子表示为=func(,a)掩护媒体a可以是图像,声音等,只要a和给人们的感觉差别不大,可以认为func是一个好的隐藏算法。本文中,掩护媒体a取为24位bmp图像,可以是任意的文件。为了能使a和相差不大,选取修改bmp图像的最低比特位(ls)的方法,因为这样做能使a和的差别最小,不会引起太大的失真。
一幅24位bmp图像,由54字节的文件头和图像数据部分组成,其中文件头不能隐藏信息,从第55字节以后为图像数据部分,可以隐藏信息。图像数据部分是由一系列的8位二进制数所组成,由于每个8位二进制数中“1”的个数或者为奇数或者为偶数,约定:若一个字节中“1”的个数为奇数,则称该字节为奇性字节,用“1”表示;若一个字节中“1”的个数为偶数,则称该字节为偶性字节,用“0”表示。我们用每个字节的奇偶性来表示隐藏的信息。
举例:设一段24位bmp文件的数据为:01100110,00111100,10001111,00011010,00000000,10101011,00111110,10110000,则其字节的奇偶排序为:0,0,1,1,0,1,1,1.现在需要隐藏信息79,由于79转化为8位二进制为01001111,将这两个数列相比较,发现第2,3,4,5位不一致,于是对这段24位bmp文件数据的某些字节的奇偶性进行调制,使其与79转化的8位二进制相一致:
第2位:将00111100 变为00111101,则该字节由偶变为奇;
第3位:将10001111变为10001110,则该字节由奇变为偶;
第4位:将00011010变为00011011,则该字节由奇变为偶;
第5位:将00000000变为00000001,则该字节由偶变为奇;
经过这样的调制,此24位bmp文件数据段字节的奇偶性便与79转化的8位二进制数完全相同,这样,8个字节便隐藏了一个字节的信息。
综上所述,将信息嵌入bmp文件的步骤为:
i.将待隐藏信息转化为二进制数据码流;
ii.将bmp文件图像数据部分的每个字节的奇偶性与上述二进制数码流进行比较;
iii.通过调整字节最低位的“0”或“1”,改变字节的奇偶性,使之与上述二进制数据流一致,即将信息嵌入到24位bmp图像中。
3.2 信息的提取
信息提取是把隐藏的信息从伪装媒体中读取出来,其过程和步骤正好与信息嵌入相反:
i .判断bmp文件图像数据部分每个字节的奇偶性,若字节中“1”的个数为偶数,则输出“0”;若字节中“1”的个数为奇数,则输出“1”;
ii.每判断8个字节,便将输出的8位数组成一个二进制数(先输出的为高位);
iii.经过上述处理,得到一系列8位二进制数,便是隐藏信息的代码,将代码转换成文本,或图像,或声音,就是隐藏的信息。
4 结 论
①由于原始24位bmp图像文件隐藏信息后,其字节数值最多变化1(因为是在字节的最低位加“1”或减“1”),该字节代表的颜色浓度最多只变化了1/256,所以,已隐藏信息的bmp图像与未隐藏信息的bmp图像,用肉眼是看不出差别的;
②将信息直接嵌入像素rg值的优点是嵌入信息的容量与所选取的掩护图像的大小成正比,而不再仅仅局限于调色板的大小;
③使用这种方法,一个大小为32 k的24位bmp图像文件,可以隐藏约32 k/8=4 k的信息(忽略文件头不能隐藏数据的54个字节),该方法具有较高的信息隐藏率。
刘 彩,杜世培
(贵州工业大学计算机科学与信息技术学院;
