一种基于BMP图像文本隐藏算法.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种基于BMP图像文本隐藏算法

一种基于BMP图像的文本信息隐藏算法 一、引言 经常上网的人可能都有这样的经历:经常能在某些网站论坛上看到一些帖子,贴了一张图片,说其中隐藏了惊人的秘密,回帖方能看到,其实最后看到的只是在图片中隐藏的一些文本信息,但这是怎么实现的呢?其实这是信息隐藏技术的一种方法。所谓信息隐藏技术,就是将某些重要信息嵌入到数字载体(如图像、声音、视频等)中去,而不损坏数字载体的原始特征。 近年来随着因特网的迅猛发展,网络成为最主要的信息传递渠道,然而网络传输的不安全性使信息极容易泄漏和被截获,网络传输的安全性日益成为人们关注的焦点,信息隐藏技术的诞生为解决这些问题提供了一个新的方向。由于它具有良好的隐蔽性,含有重要信息的载体跟它实际的特征看起来没有任何区别,使得非法用户在截获到媒介时根本不怀疑媒介中含有隐藏信息。信息隐藏技术已被广泛应用于版权保护、隐藏标识和安全不可见通信等领域。 信息隐藏技术主要是利用两个特点:一是利用数字载体本身存在很大的冗余性将信息嵌入到其中进行秘密传递;二是利用人的视觉和听觉对某些信息实现屏蔽。本文介绍了一种基于BMP图像隐藏文本文件的算法,将文本文件隐藏在一幅24位的BMP图片之中,嵌入了文本信息的BMP图片和原始图片在外观上没有任何区别,并可以正确的从中提取出所隐藏的文本信息。 二、算法原理 算法的核心思想是将文本信息以比特流的形式嵌入到原始BMP图像各像素点最不重要的位(Least Significant Bits,LSB,即最低有效位)上,这可充分保证嵌入的信息字节不可见。对于由连续像素组成的图像(本文主要针对24位的BMP图片),每个像素由R(红色)、G(绿色)、B(蓝色)三个颜色分量组成,根据亮度公式I=0.3R+0.59G+0.11B可以得知:人眼对于图像中的绿色分量最为敏感,对蓝色分量最不敏感。绿色分量每改变一个单位对人眼的刺激效果,与蓝色分量改变5个、红色分量改变2个单位对人眼的刺激效果是等价的。折算为二进制,对红色分量改变低两位、对绿色分量改变最低位或对蓝色分量改变低三位时,不会在视觉上有明显的差异。因此可在描述原始图像每个像素的三个字节中获取2+1+3=6个比特的空间,用于存储文本信息的比特流。按此比率,一幅大小为L的24位BMP图像最大可以得到的文本信息的存储空间为(L-54)×6/(3×8),大约是位图长度的1/4。 根据上面的思路,文本信息的嵌入可以用下列过程所示: 原始图像字节(四个连续像素): 像素1:R7R6R5R4R3R2R1R0 G7G6G5G4G3G2G1G0 B7B6B5B4B3B2B1B0 像素2:R7R6R5R4R3R2R1R0 G7G6G5G4G3G2G1G0 B7B6B5B4B3B2B1B0 像素3:R7R6R5R4R3R2R1R0 G7G6G5G4G3G2G1G0 B7B6B5B4B3B2B1B0 像素4:R7R6R5R4R3R2R1R0 G7G6G5G4G3G2G1G0 B7B6B5B4B3B2B1B0 待嵌入的文本信息的三个连续字节: D7D6D5D4D3D2D1D0 E7E6E5E4E3E2E1E0 F7F6F5F4F3F2F1F0 将待嵌入的文本比特流嵌入到原始图像每个像素的R、G、B分量的冗余位,即R分量的低两位,G分量的最低位,B分量的低三位,嵌入后的原始图像字节就变成: 像素1:R7R6R5R4R3R2D7D6 G7G6G5G4G3G2G1D5 B7B6B5B4B3D4D3D2 像素2:R7R6R5R4R3R2D1D0 G7G6G5G4G3G2G1E7 B7B6B5B4B3E6E5E4 像素3:R7R6R5R4R3R2E3E2 G7G6G5G4G3G2G1E1 B7B6B5B4B3E0F7F6 像素4:R7R6R5R4R3R2F5F4 G7G6G5G4G3G2G1F3 B7B6B5B4B3F2F1F0 由以上可以看出,原始图像的4个完整像素(12个字节)恰好能容纳3个完整的文本信息字节,算法的实质就是把三个字节的文本信息比特流按照2、1、3的顺序替换掉原始图像的每个字节的低2、1、3位。因此对于位掩模和移位处理等处理,均可以通过预先设定的数组来方便的实现。 三、算法的C++实现 文本信息嵌入的部分代码如下: // 指向DIB的指针 LPBYTE lpDIB; LPBYTE lpDIBBits; //读取DIB图像 m_hDIB = m_clsDIB.ReadDIBFile(bmpfile); lpDIB = (LPBYTE) ::GlobalLock((HGLOBAL) m_hDIB); // 找到DIB图像像素起始位置 lpDIBBits = m_clsDIB.FindDIBBits(lpDIB); // DIB的宽度和高度 LONG lWidth

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档