2.2.4 位图数据 位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数: http://www.paper51.com
当biBitCount=1时,8个像素占1个字节; copyright paper51.com 当biBitCount=4时,2个像素占1个字节; http://www.paper51.com 当biBitCount=8时,1个像素占1个字节; http://www.paper51.com 当biBitCount=24时,1个像素占3个字节; paper51.com Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,一个扫描行所占的字节数计算方法:DataSizePerLine= (biWidth* biBitCount+31)/8; // 一个扫描行所占的字节数 paper51.com DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数 http://www.paper51.com 位图数据的大小(不压缩情况下):DataSize= DataSizePerLine* biHeight; paper51.com 3 DES算法简介 内容来自论文无忧网 www.paper51.com DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。 DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密钥,但是很容易避开他们。所以保密性依赖于密钥。 内容来自论文无忧网 www.paper51.com 3.1 DES算法流程图 http://www.paper51.com
DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密钥结合。经过16轮后,左,右半部分合在一起经过一个末置换,这样就完成了。 在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。如下图3-1-1所示。 内容来自www.paper51.com
内容来自www.paper51.com 图3-1-1DES算法流程图 内容来自论文无忧网 www.paper51.com 3.2 DES解密 http://www.paper51.com DES一个非常有用的性质:加密和解密使用相同的算法。 内容来自论文无忧网 www.paper51.com
DES加密和解密唯一的不同是密钥的次序相反。如果各轮加密密钥分别是K1,K2,K3….K16那么解密密钥就是K16,K15,K14…K1。 paper51.com 4 信息隐藏 copyright paper51.com 4.1信息隐藏简介 内容来自www.paper51.com 信息隐藏是将需保密的或重要的信息隐藏到另外一个可以公开的媒体之中,具体来说,就是把指定的信息隐藏于数字化的图像、声音或文本当中,充分利用人们的“所见即所得”的心理,来迷惑恶意的攻击者。通常,我们称这个媒体为掩护媒体,隐藏的动作称为嵌入,掩护媒体经嵌入信息后变成一个伪装媒体。 paper51.com 4.2信息隐藏特点 内容来自www.paper51.com 信息隐藏不同于传统的加密 ,因为其目的不在于限制正常的资料存取 ,而在于保证隐藏数据不被侵犯和发现 。因此 ,信息隐藏技术必须考虑正常的信息操作所造成的威胁,即要使机密资料对正常的数据操作技术具有免疫能力 。这种免疫力的关键是要使隐藏信息部分不易被正常的数据操作 (如通常的信号变换操作或数据压缩 )所破坏 。根据信息隐藏的目的和技术要求 ,该技术存在以下特性: 内容来自www.paper51.com (1)鲁棒性 (robustness) 指不因图像文件的某种改动而导致隐藏信息丢失的能力 。这里所谓"改动"包括传输过程中的信道噪音、滤波操作、重采样、有损编码压缩、D/ A或 A/ D转换等 。 http://www.paper51.com (2)不可检测性 (imperceptibility) 指隐蔽载体与原始载体具有一致的特性 。如具有一致的统计噪声分布等 ,以便使非法拦截者无法判断是否有隐蔽信息 。 内容来自论文无忧网 www.paper51.com (3)透明性 (invisibility) 利用人类视觉系统或人类听觉系统属性 ,经过一系列隐藏处理 ,使目标数据没有明显的降质现象 ,而隐藏的数据却无法人为地看见或听见。 copyright paper51.com (4)安全性 (security) 指隐藏算法有较强的抗攻击能力 ,即它必须能够承受一定程度的人为攻击 ,而使隐藏信息不会被破坏 。 copyright paper51.com (5)自恢复性(self recoverability)由于经过一些操作或变换后 ,可能会使原图产生较大的破坏 ,如果只从留下的片段数据 ,仍能恢复隐藏信号 ,而且恢复过程不需要宿主信号,这就是所谓的自恢复性 。 内容来自www.paper51.com 4.3信息隐藏技术组成 copyright paper51.com
信息隐藏技术主要由下述两部分组成: http://www.paper51.com (1)信息嵌入算法 :它利用密钥来实现秘密信息的隐藏 。 内容来自www.paper51.com (2)隐蔽信息的提取算法:它利用密钥从隐蔽载体中检测 /恢复出秘密信息 。在密钥未知的前提下 ,第三者很难从隐秘载体中发现秘密信息。 http://www.paper51.com
在信息隐藏算法中,主要有空间域算法和变换域算法。 paper51.com (1)空域隐藏算法 空域法是直接改变图像元素的值,一般是在图像元素的亮度或色度中加入隐藏的内容。如LSB算法,它通过调整伪装载体某些像素数据的最低1~2位有效位来隐藏信息,致使所隐藏的信息靠视觉很难被发现。空域类算法的特点是只需对隐秘载体进行很小的、不易察觉的改变就能隐藏很大的信息量,计算速度较快。但从基本原理上看,该算法所隐藏的信息是极为脆弱的,若载体图像有微小的改变,隐藏信息就可能丢失。 copyright paper51.com (2)变换域隐藏算法 变换域隐藏算法是利用某种数学变换,将图像用变换域(如频域)表示,通过更改图像的某些变换域系数加入待隐藏信息,然后再利用反变换来生成隐藏有其他信息的图像。常见的变换域算法有:基于DCT的变换域算法、基于DWT的变换域算法。变换域算法具有很好的鲁棒性(指不因图像文件的某种改动而导致隐藏信息丢失的能力),对传输过程中的图像压缩、滤波以及噪声均有一定的抵抗力,并且一些算法还结合了当前的图像和视频压缩标准(如JPEG、MPEG等),具有实际意义。 copyright paper51.com 4.4早期的彩色图像信息隐藏方法 paper51.com 对一幅彩色图像,为了节省储存空间,人们将图像中最具代表的颜色组选取出来,利用3个字节分别记录每个颜色的RGB值,并且将其存放在文件的头部,这就是调色板。调色板的颜色总数若为256,则需要用1个字节来记录每个颜色在调色板中的排列号,然后,根据图像中每个像素的RGB颜色值,在调色板中找到最接近的颜色,记录其索引号。早期,信息是被隐藏在彩色图像的这个调色板中,利用调色板中颜色排列的次序来表示嵌入的信息,由于这种方法并没有改变每个像素的颜色值,只是改变调色板中颜色的排列号,因此,嵌入信息后的伪装图像与原始图像是一模一样的。然而,这个方法嵌入的信息量很小,无论掩护图像的尺寸为多大,可供嵌入的信息最多为调色板颜色的总数。为此,本文介绍一种直接改变像素RGB值的方法。 copyright paper51.com 4.5 LSB算法简介 paper51.com (LSB:least-significant-bit)信息隐藏算法,就是通常把信息隐藏在图像像素的最后一位。把信息转化成二进制代码,然后把它嵌入到图像像素的最后一位。这样做的好处是对图片的损耗很小,肉眼几乎无法分辨。但是一旦图片改变,如大小、格式等发生变化,隐藏的信息也会随之丢失。这必须通过重传操作来解决。 内容来自论文无忧网 www.paper51.com 4.6 算法实现思想 copyright paper51.com
首先,将隐蔽载体文件(24位位图文件)装载进一个缓冲区m_pBMPBuffer中,将所要隐藏的信息以二进制方式读进一个缓冲区buffer中。 内容来自论文无忧网 www.paper51.com
其次,在嵌入信息时,将buffer中一个字节(8bit)的信息存入m_pBMPBuffer中的8个字节中。具体实现是:将所要隐藏的文件的大小写入m_pBMPBuffer缓冲区的0X0006地址处(以便提取信息时使用),从0X0036地址处开始读取位图文件的数据信息,根据0X0006处的长度Length(比如该处存放的长度数为5,则Length=5),则将从0X0036地址处开始的位图数据的(Length×8)个字节的每个字节的最低bit位清零。清零采取的方法是,将位图数据部分的Length×8个字节分别和254相与。然后取出buffer中的第一个字节分别和数组OpAND[8]={128,64,32,16,8,4,2,1}的第一个元素相与,如果执行与操作后结果为0,则m_pBMPBuffer中0X0036处的数据加0,否则m_pBMPBuffer中0X0036处的数据加1,然后指向m_pBMPBuffer的数据指针data+1,接着,和判断buffer中的第一个字节和数组OpAND[8]={128,64,32,16,8,4,2,1}的第一个元素相与的结果那样判断执行,直到buffer中的第一个字节执行8次与操作后,将指向buffer缓冲区的指针加1,然后将所要隐藏的文件的大小Length减1,接着再判断Length是否为零,当Length不为零时,则继续执行以上的信息隐藏算法,否则隐藏结束。然后保存隐藏了信息后的位图文件。 http://www.paper51.com 最后,在提取信息时,把嵌有机密信息的位图文件装载进缓冲区m_pBMPBuffer中,从m_pBMPBuffer缓冲区的0X0006地址处读取隐藏了的信息的大小并存入Length中,从该缓冲区中依次读取8个字节,将这8个字节分别和1相与,再乘以各自的权值(分别是:128,64,32,16,8,4,2,1)后相加,得到加密后的信息中的第一个字节并存入DEbuffer缓冲区中,将指向DEbuffer缓冲区的指针加1,将Length的大小减1,重复上述过程,直到Length为0时提取信息过程完成。最后将DEbuffer 缓冲区的内容显示出来,便实现了信息的还原。 paper51.com
4.7 主要算法流程图及代码 内容来自论文无忧网 www.paper51.com 4.7.1 嵌入算法流程 内容来自www.paper51.com (1)嵌入算法流程图4-7-1如下所示: http://www.paper51.com
http://www.paper51.com 图4-7-1嵌入算法流程图 paper51.com (2)嵌入算法编码实现如下: 内容来自www.paper51.com 嵌入隐藏信息的函数实现: copyright paper51.com
bool ld:: HideInformation(int length) //隐藏信息 copyright paper51.com { copyright paper51.com
unsigned int OpAND[8]={128,64,32,16,8,4,2,1}; 内容来自www.paper51.com unsigned int clearzero=254; paper51.com for(inti=0;i<length;i++) copyright paper51.com
{intBitFlag; copyright paper51.com
for(int j=0;j<8;j++) 内容来自论文无忧网 www.paper51.com
{ 内容来自论文无忧网 www.paper51.com *data=*data&clearzero;//将位图数据部分的每个字节的最低位清零 内容来自www.paper51.com
BitFlag=(*buffer)&OpAND[j]; copyright paper51.com if(BitFlag= =0) paper51.com *data=*data+0; copyright paper51.com else http://www.paper51.com
*data=*data+1; copyright paper51.com data+=1; 内容来自论文无忧网 www.paper51.com } paper51.com buffer+=1; http://www.paper51.com } http://www.paper51.com
return TRUE; copyright paper51.com } paper51.com |