中国科学技术大学


继续教育学院课程设计


论文报告










论文题目:信息隐藏的算法实现
学员姓名:任建林
学    号:TB04039140
专    业:计算机科学与技术
指导教师: 
日    期:2007年1月8日











信息隐藏的算法实现



[摘要] 在信息技术飞速发展的今天,人们对信息安全给予了更多关注。互联网络在给人们带来便利的同时,由于其是一个开放的环境,也给人们的生产生活及生命财产带来安全隐患,信息要在互联网络上安全传输,必须要有一个有效的安全技术措施来保障,信息隐藏技术和信息加密技术是信息安全的两个重要的分支,信息加密是利用对称密钥或非对称密钥密码加密算法把明文变换成密文,通过公开信道送到接收者手中。由于密文是一堆乱码,攻击者监视着信道的通信,一旦截获到乱码,就可以利用已有的对各种密码体制的攻击方法进行破译,所以信息加密保护的是信息的内容。而信息隐藏则不同,秘密信息被嵌入宿主信息中,并且不损坏宿主载体的信息,攻击者无法直观地判断他所监视的信息中是否含有秘密信息,它隐藏了信息的存在形式。因此信息隐藏领域已经成为信息安全的焦点,本文主要研究如何把文本文件、WORD文件、JPG文件、写字板文件嵌入位图文件(.BMP)的方法及算法实现。

[关键词] 信息安全 隐藏 嵌入 信息







1. 绪论
    现代信息隐藏技术是由古老的隐写术(Steganography)发展而来的,隐写术一词来源于希腊语,其对应的英文意思是“Covered writing”。隐写术的应用实例可以追溯到非常久远的年代。被人们誉为历史学之父的古希腊历史学家希罗多德(Herodotus, 486—425),在其著作中讲述了这样一则故事:一个名叫Histaieus的人筹划着与他的朋友合伙发起叛乱,里应外合,以便推翻波斯人的统治。他找来一位忠诚的奴隶,剃光其头发并把消息文刺在头皮上,等到头发又长起来了,把这人派出去送“信”,最后叛乱成功了。
1.1 信息隐藏的概念
信息隐藏 (Information Hiding):主要研究如何将某一机密信息秘密隐藏于另一公开的信息中,然后通过公开信息的传输来传递机密信息。攻击者则难以从公开信息中判断机密信息是否存在,难以截获机密信息,从而能保证机密信息的安全。
1.2 信息隐藏技术的组成
信息隐藏技术主要由下述两部分组成:
    1) 信息嵌入算法 :它利用密钥来实现秘密信息的隐藏 。
    2) 隐蔽信息的提取算法:它利用密钥从隐蔽载体中检测 /恢复出秘密信息 。在密钥未知的前提下 ,第三者很难从隐秘载体中发现秘密信息 。

2. 编程思想
    首先,将隐蔽载体文件(位图文件)装载进一个缓冲区pbmfh中,将所要隐藏的信息文件以二进制读方式也装载进一个缓冲区buffer中。
    其次,在嵌入信息时,将buffer中一个字节(8bit)的信息存入pbmfh中的8个字节中,并且保证这8个字节中的每个字节对2取模后与buffer中当前字节对应的位(8个字节对应8bit即对应一个字节)相同。具体实现是:将所要隐藏的文件的大小写入pbmfh缓冲区的0X0006地址处(以便提取信息时使用),再将所要隐藏的文件的格式写入pbmfh缓冲区0X0008地址处,从0X019A地址处开始读取位图文件的数据信息,如果pbmfh中的0X019A地址处的内容对2取模后与当前buffer中的内容的最高位不相同并且当前buffer中的内容也为0,则将pbmfh中的0X019A地址处的内容减1,否则pbmfh中的0X019A地址处的内容不变,接着从pbmfh中读取下一个字节,将该字节内容与当前buffer中的内容的次高位做上述判断,连续读取8个字节后,将指向buffer缓冲区的指针加1,将所要隐藏的文件的大小length减1,重复上述过程,直到length为0时嵌入信息过程完成。然后保存嵌入了信息后的位图文件。
    最后,在提取信息时,把嵌有机密信息的位图文件装载进缓冲区pbmfh中,从pbmfh缓冲区的0X0006地址处读取隐藏了信息的文件的大小并存入length中,从0X0008地址处读取隐藏了信息的文件的格式,从该缓冲区中一次读取8个字节,将这8个字节对2取模后,乘以各自的权(即128,64,32,16,8,4,2,1)后相加,得到原始文件中的一个字节并存入DEbuffer缓冲区中,将指向DEbuffer缓冲区的指针加1,将length的大小减1,重复上述过程,直到length为0时提取信息过程完成。最后将DEbuffer 缓冲区的内容以二进制方式写入文件中,保存该文件。
2.1 程序流程图


2.2 主要算法
1) 嵌入隐藏信息的函数实现HideInformation(int length)
/*************************************************************************
函数名: HideInformation
入口参数: length
出口参数: TRUE/FALSE
功能: 根据要隐藏文件的大小隐藏信息,若隐藏成功,返回TRUE,否则返回FALSE 。
**************************************************************************/

BOOL HideInformation(int length) //隐藏信息
{ unsigned int OpAND[8]={128,64,32,16,8,4,2,1}; //按位与&操作
 char tempbuffer=0;
int i;
if(length==0) //空文件
  return FALSE;
while(length!=0) //嵌入信息过程
 {
  for(i=0;i<8;i++)
  {
   if((tempbuffer=(*buffer)&OpAND[i])==0) //为0
   {
    if(abs(*data)%2!=0 && *data!=0)
     *data=*data-1; //保证原位图信息取模后为0
    else if(*data==0)
     *data=*data; //不变
   }
   else //为1
   {
    if(*data%2!=1 && *data!=0)
     *data=*data-1; //保证原位图信息取模后为1
    else if(*data==0)
     *data=*data+1; //对原数据为0 的处理,保证原位图信息取模后为1
   }
   data=data+1;
  }
  buffer=buffer+1;
  length=length-1;
 }
 return TRUE;
}

2) 提取隐藏信息的函数实现DistillInformation(int length)
*************************************************************
函数名: DistillInformation
入口参数: length
出口参数: TRUE/FALSE
功能: 根据所要提取文件的大小length进行信息提取,若提取成功,
返回TRUE,否则返回FALSE 。
*************************************************************/

BOOL DistillInformation(int length) //提取信息
{
 unsigned int OpAND[8]={128,64,32,16,8,4,2,1}; //按位与&操作
 int sum; //保存每个字符的ASCII码
 int i;
 if(length==0)
  return FALSE;
 while(length!=0) //解密过程
 {
  sum=0; //记录文本文件中的字符的ASCII码
  for(i=0;i<=7;i++)
  {
   if((*data)%2==0)
   {
    sum=sum+0*OpAND[i]; //计算字符的ASCII码
   }
   else sum=sum+1*OpAND[i];
   data=data+1;
  }
  *DEbuffer=(char)sum;
  DEbuffer=DEbuffer+1;
  length=length-1;
 }
 return TRUE;
}

3. 程序运行
    通过嵌入算法将文本文件(.TXT)、WORD文件(.DOC)、写字板文件(.RTF)、JPG图片格式文件隐藏在位图文件(.BMP)的隐蔽载体中,保存此位图文件,再用提取算法将此位图文件中的隐藏信息提取出来,并将提取出来的信息保存为其原来格式。(注:所要隐藏的文件最大为64K)。
    1) 程序界面
    2) 帮助界面
4. 总结
    在信息隐藏的研究中,主要研究信息隐藏算法与隐蔽通信。在信息隐藏算法中,主要有空间域算法和变换域算法。最典型的空间域信息隐藏算法为LSB算法(本文也属于LSB算法),最典型的变换域算法是小波变换算法。LSB算法因其基本原理限制,所隐藏的信息极为脆弱,无法经受一些无损和有损的信号处理。由于LSB算法的鲁棒性比较差,相关的研究改进工作都是提高其鲁棒性。对于小波变换算法,由于小波变换具有良好的视频局部特性,加上JPEG2000和MPEG4压缩标准使用小波变换算法取得了更高的压缩率,使得基于小波变换的信息隐藏技术成为目前研究的热点。信息隐藏可以分为四个阶段:预处理阶段、嵌入阶段、传输阶段和提取阶段。预处理阶段通过一些优秀的加密算法先对机密信息进行加密处理,在嵌入阶段,使用基于LSB或小波的隐藏信息的算法,将加密过的机密信息嵌入宿主载体信息中,进行二级安全保护,在传输阶段,以隐藏通信的发送方和接收方来进行隐蔽通信,进行三级安全保护,从而使信息通信的整个过程都是比较安全的,在提取信息阶段,先通过提取算法进行机密信息的提取,再用相应的解密算法(或私钥)进行解密以便恢复原机密信息。本文只对简单的LSB算法的实现,并没有对算法进行优化,因此鲁棒性比较差,有待更进一步提高。现阶段,信息隐藏技术虽然没有信息加密技术那样形成一个比较完善的理论体系,但随着网络技术和通信技术的发展,相信在不久的将来,信息隐藏技术一定会取得更广阔的发展空间。

5.软件下载演示
点击下载信息隐藏的算法实现软件

6. 参考文献
1) [美]Charles Petzold 著《Windows程序设计》,第五版上、下、册,, 北京博彦科技发展有限公司 译, 北京大学出版社
2) 谭浩强《C程序设计》第二版, 著, 清华大学出版社

7. 参考网文
1) http://www.ectime.com.cn/cgi-bin/db2www.cgi/info.d2w/report?nbr=4711
2) http://www.ccw.com.cn/htm/center/tech/02_8_1_4.asp
3) http://www.eprintcn.com/doc/a19/042006041011163202.htm

 

中国科学技术大学继续教育学院 © 版权所有, 联系我们
School of Distance Learning and Continuing Education of USTC © Copyright 2006, All Rights Reserved