您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 合肥工业大学信息隐藏实验报告 完整代码版
计算机与信息学院信息隐藏实验报告专业班级信息安全13-1班学生姓名及学号马骏2013211869课程教学班号任课教师郑淑丽实验指导教师郑淑丽实验地点20~20学年第学期实验1BMP位图信息隐藏一、实验目的学习BMP格式文件,并编程实现对位图文件信息隐藏二、实验要求将TXT文件嵌入BMP文件中三、问题描述1、BMP位图文件的格式?2、有哪几种方法隐藏信息,分别采用什么样的数据结构3、随机选取如何避免“碰撞”的出现四、算法思想1、BMP位图文件格式0000h~0001h2字节-------------------------bm的ASC码0002h~0005h4字节-------------------------文件大小102718字节0006h~0009h4字节-------------------------全为0000Ah~000Dh4字节-------------------------偏移量118字节000Eh~0011h4字节-------------------------位图信息块大小40字节0012h~0015h4字节-------------------------宽4500016h~0019h4字节-------------------------高450001Ah~001Bh2字节-------------------------恒为01h00h001Ch~001Dh2字节-------------------------颜色所占二进制位数值04h00h=416色位图001Eh~0021h4字节-------------------------压缩方式=0无压缩0022h~0025h4字节-------------------------图像数据区大小102600字节0026h~0029h4字节-------------------------水平每米多少像素39个002Ah~002Dh4字节-------------------------垂直每米多少像素39个002Eh~0031h4字节-------------------------图像所用颜色数=00032h~0035h4字节-------------------------重要颜色数=00036h~0076h64字节-------------------------颜色表0077h~1913Dh102600字节-------------------------图像数据区2、(1)、在图片图像数据区的一个连续的数据区采用整字节替换的方法(2)、在图像数据的最后增加文本信息的字节(3)、顺序选取每个文本信息字节的每一位替换图像数据区的一个连续的数据区每个字节的最后一位。(4)、顺序选取每个文本信息字节的每一位替换图像数据区随机选取一个字节的最后一位。(5)、首先对颜色表排序,比对顺序选取每个文本信息字节的每一位与图像数据区的一个连续的数据区每个字节的最后一位,如果不一致则不断选取相近的颜色,直到颜色序号二进制最后一位与文本信息的字节最后一位一致。(6)首先对颜色表排序,比对顺序选取每个文本信息字节的每一位与图像数据区的随机选取的数据区每个字节的最后一位,如果不一致则不断选取相近的颜色,直到颜色序号二进制最后一位与文本信息的字节最后一位一致。3、为了避免“碰撞”则隐藏程序和解密程序需要通过一个协议,规定一个像素点只能使用一次,即隐藏时对使用过的像素点做记录,如果像素点使用过,则产生下一个随机数。五、模块划分constintmax=500000;charhuancun[max];//从文件中读入的字符chartxthuancun[max];//txt中的字符charwritehuancun[max];//可以写进文件中的字符串longintwritehuancunnumber=0;//准备写入文件中的个数longinthuancunnumber=0;//从文件中读出字符个数longinttxthuancunnumber=0;voidread(constchar*realfile)//读入huancun[]voidtxtread(constchar*realfile)//读入txthuancun[]voidwrite(constchar*yasuofile)voiddeal8bit(charkp)//仅仅是显示二进制文件的函数voideasyswitch()//简单的从100开始置换voidendswitch()intcalculate8bit(charkp,intbyte)//返回一个字符第byte位为0或1从右往左数intgetbegin()//得到偏移量的大小下一个就是数据区的开始即begin的值charchang8bit(charinputtxt,charbmp,intbyte)//txt的第byte被bmp第八位代替从左向右charchangelastbyte(charbmpinput,chartxt,intbyte)//bmp字节的第8位被txt字节的第byte位代替从左向右voidmiddleswitch()voidhighswitch()//还没有解决碰撞问题intcaculatechar4(charfun[4])//计算4个char的十进制大小权重132intcaculatelastbit4(charzifu)//计算字节的最后四位代表的十进制数charcalculateaddlast4bit(charpt,intcolornumber)//第一个字符的前四位保留后四位用这个int改成的二进制替换classcolor16//16色颜色元{public:charbit4[4];intmyposision;intbitnumber;//charbit[4]10进制intcolornumber;//第几个颜色0到15号颜色};classcolortable16//16色颜色表{public:colortable16()voidsetcolortable(charfun[4],intcolornumber)voidexchange()//排序intgetnextcolornumber(charzifu)//得到相近颜色的颜色好intmycolortable16number;color16mycolortable16[17];};voidmiddlehidepluspower132()voidhighhidepluspower132()voiddiscodehighhidepluspower132()//解密函数六、测试数据隐藏信息:hellomarkchalse,thisisasecretnumber6424155pleaseputthisinancode小刀司令程序过程:程序效果:源文件整字节替换顺序字节末位替换随机字节末位替换文件末位增加字节选择相近颜色顺序字节末位替换选择相近颜色随机字节末位替换源文件整字节替换顺序字节末位替换随机字节末位替换文件末位增加字节选择相近颜色顺序字节末位替换选择相近颜色随机字节末位替换程序分析:在整字节替换中得到的图片产生偏移,而直接对字节末位做替换的程序,会使像素点的颜色反差较大,如果是在颜色表选择相近颜色再对字节末位做替换效果较好,但在纯色区域表现不佳。在图像数据区后增加字节,没有和原图产生差异,但文件的大小有增加,而且是明文容易被发现。七、源程序(见附录)八、总结此次实验,使我在学习信息隐藏技术原理的基础上,进一步学习了对位图文件的编程。更加深了我对信息隐藏的理解。但程序中依然存在着很多不足,希望在以后的学习中加以完善。附录:Hidemessage1.cpp/*基本要求:txt嵌入bmp文件中*/#includeiostream#includestring#includefstream#includesstream#includemath.husingnamespacestd;constchar*readbmpfile=n666.bmp;constchar*writefile=n888.bmp;constchar*readtxtfile=n2.txt;constchar*writetxtfile=n999.txt;constintmax=500000;charhuancun[max];//从文件中读入的字符chartxthuancun[max];//txt中的字符charwritehuancun[max];//可以写进文件中的字符串longintwritehuancunnumber=0;//准备写入文件中的个数longinthuancunnumber=0;//从文件中读出字符个数longinttxthuancunnumber=0;voidread(constchar*realfile)//读入huancun[]{huancunnumber=0;ifstreaminputfile;inputfile.open(realfile);if(!inputfile){coutnofileendl;}chara;while(!inputfile.eof()){a=inputfile.get();huancun[huancunnumber]=a;huancunnumber++;}inputfile.close();}voidtxtread(constchar*realfile)//读入txthuancun[]{txthuancunnumber=0;ifstreaminputfile;inputfile.open(realfile);if(!inputfile){coutnofileendl;}chara;while(!inputfile.eof()){a=inputfile.get();txthuancun[txthuancunnumber]=a;txthuancunnumber++;}inputfile.close();for(intx=0;xtxthuancunnumber;x++)couttxthuancun[x];coutendl;}voidwrite(constchar*yasuofile){ofstreamoutputfile;outputfile.open(yasuofile);longintx;for(x=0;xwritehuancunnumber;x++){outputfilewritehuancun[x];}outputfile.close();}voiddeal8bit(charkp)//仅仅是显示二进制文件的函数{charn1,n2,n3,n4,n5,n6,n7,n8;charkk;_asm{movn1,10000000b;movn2,01000000b;movn3,00100000b;movn4,00010000b;movn5,00001000b;movn6,00000100b;movn7,00000010b;movn8,00000001b;}kk=kp;_asm{andkk,10000000b;}if(kk==n1){cout1;}elsecout0;kk=kp;_asm{andkk,01000000b;}if(kk==n2){cout1;}elsecout0;kk=kp;_asm{andkk,00100000b;}if(kk==n3){cout1;}elsecout0;kk=kp;_asm{andkk,00010000b;}if(kk==n4){cout1;}elsecout0;kk=kp;_asm{andkk,00001000b;}if(kk==n5){cout1;}elsecout0;kk=kp;_asm{andkk,00000100b;}if(kk==n6){cout1;}elsecout0;kk=kp;_asm{andkk,00000010b;}if(kk==n7)
本文标题:合肥工业大学信息隐藏实验报告 完整代码版
链接地址:https://www.777doc.com/doc-3868567 .html