信息安全基础实习报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

信息安全基础实习报告姓名:学号:班级:指导老师:11.问题描述通信系统模型反映了各种通信系统的共同特性,对通信系统模型的研究有助于找出信息传输过程中的共同规律,以提高信息传输的可靠性、有效性、保密性和认证性。本课题的任务是针对文本文件(txt文件)或图像文件(bmp文件)对信源编(译)码,信道编(译)码部分编程实现,并分析实验数据。2.需求分析该通信系统模型主要有四个模块:信源编码(Huffman编码)、信道编码(线性分组码)、信道解码、信源解码。根据实验要求,需要读写文件,本文选择的是读取图像文件,涉及到读取图像文件的知识。编码对象:图像(test1.bmp)信源编码算法:哈弗曼编码信源编码结果:文本(2.txt)信道编码算法:线性分组码信道编码结果:文本(3.txt)统计压缩率统计传输率信源译码:文本5.txt)解码结果:图像(test2.bmp)信道译码结果:文本(4.txt)读像素:文本(1.txt)23.算法分析3.1Huffman编码Huffman算法是一种基于统计的压缩方法。它的本质就是对文本文件中的字符进行重新编码,对于使用频率越高的字符,其编码也越短。但是任何2个字符的编码,是不能出现向前包含的。也就是说字符A的编码的前段,不可能为字符B的编码。经过编码后的文本文件,主要包含2个部分:Huffman码表部分和压缩内容部分。解压缩的时候,先把Huffman码表取出来,然后对压缩内容部分各个字符进行逐一解码,形成源文件。编码过程如下(1)将信源符号按概率递减顺序排列;(2)把两个最小的概率加起来,作为新符号的概率;(3)重复步(1)、(2)直到概率和达到1为止;(4)在每次合并消息时,将被合并的消息赋以1和0或0和1;(5)寻找从每个信源符号到概率为1处的路径,记录下路径上的1和0;(6)对每个符号写出1、0序列(从码数的根到终节点)。哈夫曼译码过程与编码过程相反,译码过程就是分解电文中字符串的过程,具体步骤如下:首先输入要一点问的二进制编码,然后从哈夫曼树的根结点出发,对于电文的二进制编码,按照二进制位串中的0和1确定是进入左分支还是右分支:若编码为0,则进入结点的3左孩子,否则进入结点的右孩子,一旦到达叶结点,就译出该叶子结点所代表字符。3.2线性分组码(7,3)码线性分组码是一类奇偶校验码,它可以由(n,k)形式表示,编码器将一个k比特信息分组(信息矢量)转变为一个更长的由给定元素符号集组成的n比特编码分组,当这个符号集包含两个元素(0和1),与二进制相对,称为二进制编码。分组码是对每段k位长的信息组,以一定规则增加r=n-k个检验元,组成长为n的序列:(𝐶𝑛−1,𝐶𝑛−2,…,𝐶1,𝐶0),称这个序列为码字。在二进制情况下,信息组总共有k2个,因此通过编码器后,相应的码字也有k2个,称这k2个码字集合为(n,k)分组码。n长序列的可能排列总共有n2种。称被选取的k2个n重为许用码组,其余个为禁用码组,称R=k/n为码率。那么对于(7,3)码即为用7位长的序列表示3位信息码,7位长序列的可能排列总共有128个。许用码组有8个,其余128-8=120个禁用码组,码率为R=3/7=42.86%。对于长度为n的二进制分组码,可以表示成(n,k),通常用于前向纠错。在分组码中,监督位加到信息位之后,形成新码,在编码中,k个信息位,被编为n位长度,(n-k)个监督码的作用是实现检错和纠错。编码原理(1)根据给定的生成矩阵G,求得监督码与信息码之间呈线性关系即编码方程。(2)输入信息码,代入上述编码方程中,得到各监督码。(3)监督码附带在信息码之后,一起输出,即得到编码结果。已知线性分组码的生成矩阵1001110G=01001110011101因为[C6C5C4]G=[C6C5C4C3C2C1C0]即1001110[C6C5C4]0100111=[C6C5C4C3C2C1C0]0011101所以由上式可以得到编码方程组C6=C6C5=C5C4=C4=+=++=+4=+表1信息码、监督码、许用码对照表译码原理(1)根据生成矩阵计算出监督矩阵H,由H计算出伴随式S。(2)如果S=[0,0,0,0],R1无错。(3)如果S与H的转置矩阵的某一行相等,则有一个错误,找到相应的错误图样E,则正确的接收到的码字R2=R1+E(二进制异或)。(4)译出的码为R2的前3位。(5)如果S不等于H转置的任意一行,则有两个或多个错误,不能得到正确的译码结果。已知线性分组码的生成矩阵1001110G=01001110011101G=[IkP](3)其中Ik是k阶单位矩阵,这里k=31110G=0111(4)1101监督矩阵H=[QIr](5)10000100Ir=0010(6)信息组监督码码字000000000000000011101001110101001110100111011101001110101001110100111010100111010011110100111010011110100111010050001因为P=QT(7)所以由(4)得101111Q=110(8)011因此由(5)(6)(8)得监督矩阵10110001110100Q=1100010(9)01100014.算法实现4.1图片处理定义结构体//位图文件头定义;//其中不包含文件类型信息(由于结构体的内存结构决定,//要是加了的话将不能正确读取文件信息)typedefstructtagBITMAPFILEHEADER{//WORDbfType;//文件类型,必须是0x424D,即字符“BM”DWORDbfSize;//文件大小WORDbfReserved1;//保留字WORDbfReserved2;//保留字DWORDbfOffBits;//从文件头到实际位图数据的偏移字节数}BITMAPFILEHEADER;typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//信息头大小LONGbiWidth;//图像宽度LONGbiHeight;//图像高度WORDbiPlanes;//位平面数,必须为1WORDbiBitCount;//每像素位数DWORDbiCompression;//压缩类型6DWORDbiSizeImage;//压缩图像大小字节数LONGbiXPelsPerMeter;//水平分辨率LONGbiYPelsPerMeter;//垂直分辨率DWORDbiClrUsed;//位图实际用到的色彩数DWORDbiClrImportant;//本位图中重要的色彩数}BITMAPINFOHEADER;//位图信息头定义typedefstructtagRGBQUAD{BYTErgbBlue;//该颜色的蓝色分量BYTErgbGreen;//该颜色的绿色分量BYTErgbRed;//该颜色的红色分量BYTErgbReserved;//保留值}RGBQUAD;//调色板定义typedefstructtagIMAGEDATA//像素信息{BYTEblue;//BYTEgreen;//BYTEred;}IMAGEDATA;像素保存boolBMP::readOfBMP(){cout\t正在读取原文件信息,请稍后...\nendl;FILE*fpi;fpi=fopen(G:\\学习资料\\信息安全基础实习\\ConsoleApplication1\\ConsoleApplication1\\test1.BMP,rb);if(fpi==NULL){cout\t无法打开文件1!\nendl;returnfalse;}//判断是否是bmp格式文件WORDbfType;fread(&bfType,1,sizeof(WORD),fpi);if(bfType!=0x4d42){cout\t不是bmp格式的图片!\nendl;returnfalse;}//读取bmp文件的文件头和信息头fread(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpi);fread(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpi);//读取调色板for(unsignedintnCounti=0;nCountistrInfo.biClrUsed;nCounti++)7{fread((char*)&(strPla[nCounti].rgbBlue),1,sizeof(BYTE),fpi);fread((char*)&(strPla[nCounti].rgbGreen),1,sizeof(BYTE),fpi);fread((char*)&(strPla[nCounti].rgbRed),1,sizeof(BYTE),fpi);fread((char*)&(strPla[nCounti].rgbReserved),1,sizeof(BYTE),fpi);}strInfo.biWidth=(strInfo.biWidth*sizeof(IMAGEDATA)+3)/4*4;longwidth=strInfo.biWidth;longheight=strInfo.biHeight;//width=(width*sizeof(IMAGEDATA)+3)/4*4;//申请并初始化存储像素imageDataPtr=newIMAGEDATA[width*height];for(inti=0;iheight;++i){for(intj=0;jwidth;++j){(*(imageDataPtr+i*width+j)).blue=0;//(*(imageDataPtr+i*width+j)).green=0;//(*(imageDataPtr+i*width+j)).red=0;}}fread(imageDataPtr,sizeof(structtagIMAGEDATA)*width,height,fpi);fclose(fpi);cout\t原文件读取完毕!\nendl;returntrue;}4.2Huffman解压缩Huffman树构造构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。voidHaffman(intweight[],HaffNodehaffTree[]){inti,j,m1,m2,x1,x2;for(i=0;i2*MaxN-1;i++){if(iMaxN){haffTree[i].letter=(char)i;haffTree[i].weight=weight[i];}haffTree[i].flag=0;8haffTree[i].parent=-1;haffTree[i].leftChild=-1;haffTree[i].rightChild=-1;}for(i=0;iMaxN-1;i++){m1=m2=MaxValue;x1=x2=0;for(j=0;jMaxN+i;j++){if(haffTree[j].weightm1&&haffTree[j].flag==0){m2=m1;x2=x1;m1=haffTree[j].weight;x1=j;}elseif(haffTree[j].weightm2&&haffTree[j].flag==0){m2=haffTree[j].weight;x2=j;}}haffTree[x1].parent=MaxN+i;haffTree[x2].parent=MaxN+i;haffTree[x1].flag=1;haffTree[x2].flag=1;haffTree[MaxN+i].weight=haffTree[x1].weight+haffTree[x2].weight;haffTree[MaxN+i].leftChil

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功