信息安全基础实习报告_第1页
信息安全基础实习报告_第2页
信息安全基础实习报告_第3页
信息安全基础实习报告_第4页
信息安全基础实习报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息安全基础实习报告姓 名: 学 号: 班 级: 指导老师: 1.问题描述通信系统模型反映了各种通信系统的共同特性,对通信系统模型的研究有助于找出信息传输过程中的共同规律,以提高信息传输的可靠性、有效性、保密性和认证性。本课题的任务是针对文本文件(txt文件)或图像文件(bmp文件)对信源编(译)码,信道编(译)码部分编程实现,并分析实验数据。2.需求分析该通信系统模型主要有四个模块:信源编码(Huffman编码)、信道编码(线性分组码)、信道解码、信源解码。编码对象:图像(test1.bmp)信源编码算法: 哈弗曼编码信源编码结果:文本(2.txt)信道编码算法: 线性分组码信道编码结果:文

2、本(3.txt)统计压缩率统计传输率信源译码:文本5.txt)解码结果:图像(test2.bmp)信道译码结果:文本(4.txt)读像素:文本(1.txt)根据实验要求,需要读写文件,本文选择的是读取图像文件,涉及到读取图像文件的知识。3.算法分析3.1Huffman编码Huffman算法是一种基于统计的压缩方法。它的本质就是对文本文件中的字符进行重新编码,对于使用频率越高的字符,其编码也越短。但是任何2个字符的编码,是不能出现向前包含的。也就是说字符A的编码的前段,不可能为字符B的编码。经过编码后的文本文件,主要包含2个部分:Huffman码表部分和压缩内容部分。解压缩的时候,先把Huffm

3、an码表取出来,然后对压缩内容部分各个字符进行逐一解码,形成源文件。编码过程如下(1) 将信源符号按概率递减顺序排列; (2) 把两个最小的概率加起来, 作为新符号的概率; (3) 重复步(1) 、(2) 直到概率和达到1为止;(4) 在每次合并消息时,将被合并的消息赋以1和0或0和1;(5) 寻找从每个信源符号到概率为1处的路径,记录下路径上的1和0;(6) 对每个符号写出1、0序列(从码数的根到终节点)。哈夫曼译码过程与编码过程相反,译码过程就是分解电文中字符串的过程,具体步骤如下:首先输入要一点问的二进制编码,然后从哈夫曼树的根结点出发,对于电文的二进制编码,按照二进制位串中的0和1确定

4、是进入左分支还是右分支:若编码为0,则进入结点的左孩子,否则进入结点的右孩子,一旦到达叶结点,就译出该叶子结点所代表字符。3.2线性分组码(7,3)码线性分组码是一类奇偶校验码,它可以由(n,k)形式表示,编码器将一个k比特信息分组(信息矢量)转变为一个更长的由给定元素符号集组成的n比特编码分组,当这个符号集包含两个元素(0和1),与二进制相对,称为二进制编码。分组码是对每段k位长的信息组,以一定规则增加r=n-k个检验元,组成长为n的序列:(Cn-1,Cn-2,C1,C0),称这个序列为码字。在二进制情况下,信息组总共有k2个,因此通过编码器后,相应的码字也有k2个,称这k2个码字集合为(n

5、,k)分组码。n长序列的可能排列总共有n2种。称被选取的k2个n重为许用码组,其余kn22-个为禁用码组,称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)个监督码的作用是实现检错和纠错。n 编码原理(1)根据给定的生成矩阵G,求得监督码与信息码之间呈线性关系即编码方程。 (2)输入信息码,代入上

6、述编码方程中,得到各监督码。 (3)监督码附带在信息码之后,一起输出,即得到编码结果。已知线性分组码的生成矩阵 1 0 0 1 1 1 0 G = 0 1 0 0 1 1 1 0 0 1 1 1 0 1因为 C6C5C4G=C6C5C4C3C2C1C0即 1 0 0 1 1 1 0 C6C5C4 0 1 0 0 1 1 1 = C6C5C4C3C2C1C0 0 0 1 1 1 0 1所以由上式可以得到编码方程组C6 = C6C5 = C5C4 = C4=+=+ =+=+表1 信息码、监督码、许用码对照表信息组监督码码字00000000000000001110100111010100111010

7、01110111010011101010011101001110101001110100111101001110100111101001110100n 译码原理(1)根据生成矩阵计算出监督矩阵H,由H计算出伴随式S。 (2)如果S=0,0,0,0,R1无错。 (3)如果S与H的转置矩阵的某一行相等,则有一个错误,找到相应的错误图样E,则正确的接收到的码字R2=R1+E(二进制异或)。 (4)译出的码为R2的前3位。 (5)如果S不等于H转置的任意一行,则有两个或多个错误,不能得到正确的译码结果。已知线性分组码的生成矩阵 1 0 0 1 1 1 0 G = 0 1 0 0 1 1 1 0 0 1

8、 1 1 0 1 G=IkP (3)其中Ik是k阶单位矩阵,这里k=3 1 1 1 0 G = 0 1 1 1 (4) 1 1 0 1 监督矩阵 H=QIr (5) 1 0 0 00 1 0 0 Ir = 0 0 1 0 (6) 0 0 0 1因为 P=QT (7)所以由(4)得 1 0 11 1 1 Q = 1 1 0 (8) 0 1 1因此由(5)(6)(8)得监督矩阵 1 0 1 1 0 0 01 1 1 0 1 0 0 Q = 1 1 0 0 0 1 0 (9) 0 1 1 0 0 0 14.算法实现4.1图片处理n 定义结构体/位图文件头定义;/其中不包含文件类型信息(由于结构体的内

9、存结构决定,/要是加了的话将不能正确读取文件信息)typedef struct tagBITMAPFILEHEADER/WORD bfType; /文件类型,必须是0x424D,即字符“BM”DWORD bfSize; /文件大小WORD bfReserved1; /保留字WORD bfReserved2; /保留字DWORD bfOffBits; /从文件头到实际位图数据的偏移字节数BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADERDWORD biSize; /信息头大小LONG biWidth; /图像宽度LONG biHeight; /

10、图像高度WORD biPlanes; /位平面数,必须为1WORD biBitCount; /每像素位数DWORD biCompression; /压缩类型DWORD biSizeImage; /压缩图像大小字节数LONG biXPelsPerMeter; /水平分辨率LONG biYPelsPerMeter; /垂直分辨率DWORD biClrUsed; /位图实际用到的色彩数DWORD biClrImportant; /本位图中重要的色彩数BITMAPINFOHEADER; /位图信息头定义typedef struct tagRGBQUADBYTE rgbBlue; /该颜色的蓝色分量BY

11、TE rgbGreen; /该颜色的绿色分量BYTE rgbRed; /该颜色的红色分量BYTE rgbReserved; /保留值RGBQUAD; /调色板定义typedef struct tagIMAGEDATA /像素信息BYTE blue;/BYTE green;/BYTE red;IMAGEDATA;n 像素保存bool BMP:readOfBMP()cout t正在读取原文件信息,请稍后.n endl;FILE *fpi;fpi = fopen(G:学习资料信息安全基础实习ConsoleApplication1ConsoleApplication1test1.BMP, rb);if

12、 (fpi = NULL)cout t无法打开文件1!n endl;return false;/判断是否是bmp格式文件WORD bfType;fread(&bfType, 1, sizeof(WORD), fpi);if (bfType != 0x4d42)cout t不是bmp格式的图片!n endl;return false;/读取bmp文件的文件头和信息头fread(&strHead, 1, sizeof(tagBITMAPFILEHEADER), fpi);fread(&strInfo, 1, sizeof(tagBITMAPINFOHEADER), fpi);/读取调色板for (

13、unsigned int nCounti = 0; nCounti strInfo.biClrUsed; nCounti+)fread(char *)&(strPlanCounti.rgbBlue), 1, sizeof(BYTE), fpi);fread(char *)&(strPlanCounti.rgbGreen), 1, sizeof(BYTE), fpi);fread(char *)&(strPlanCounti.rgbRed), 1, sizeof(BYTE), fpi);fread(char *)&(strPlanCounti.rgbReserved), 1, sizeof(BY

14、TE), fpi);strInfo.biWidth = (strInfo.biWidth * sizeof(IMAGEDATA)+3) / 4 * 4;long width = strInfo.biWidth;long height = strInfo.biHeight;/width = ( width * sizeof(IMAGEDATA) + 3) / 4 * 4;/申请并初始化存储像素imageDataPtr = new IMAGEDATAwidth * height;for (int i = 0; i height; +i)for (int j = 0; j width; +j)(*(

15、imageDataPtr + i * width + j).blue = 0;/(*(imageDataPtr + i * width + j).green = 0;/(*(imageDataPtr + i * width + j).red = 0;fread(imageDataPtr, sizeof(struct tagIMAGEDATA) * width, height, fpi);fclose(fpi);cout t原文件读取完毕!n endl;return true;4.2 Huffman解压缩n Huffman树构造构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个

16、频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。void Haffman(int weight, HaffNode haffTree)int i, j, m1, m2, x1, x2;for (i = 0; i2 * MaxN - 1; i+)if (iMaxN)haffTreei.letter = (char)i;haffTreei.weight = weighti;haffTreei.flag = 0;haffTreei.parent = -1;haffTreei.leftChild = -1;haf

17、fTreei.rightChild = -1;for (i = 0; iMaxN - 1; i+)m1 = m2 = MaxValue;x1 = x2 = 0;for (j = 0; jMaxN + i; j+)if (haffTreej.weightm1&haffTreej.flag = 0)m2 = m1;x2 = x1;m1 = haffTreej.weight;x1 = j;else if (haffTreej.weightm2&haffTreej.flag = 0)m2 = haffTreej.weight;x2 = j;haffTreex1.parent = MaxN + i;ha

18、ffTreex2.parent = MaxN + i;haffTreex1.flag = 1;haffTreex2.flag = 1;haffTreeMaxN + i.weight = haffTreex1.weight + haffTreex2.weight;haffTreeMaxN + i.leftChild = x1;haffTreeMaxN + i.rightChild = x2;n Huffman编码解压缩比构造哈夫曼树要简单的多,将输入缓冲区中的每个编码用对应的ASCII码逐个替换就可以了。只要记住,这里的输入缓冲区是一个包含每个ASCII值的编码的位流。因此,为了用ASCII值替

19、换编码,我们必须用位流搜索哈夫曼树,直到发现一个叶节点,然后将它的ASCII值添加到输出缓冲区中:void HaffmanEncode(HaffNode haffTree, char codeMaxNMaxN)/编码结果保存在2.txt文档中char hcodeMaxN;int start, i, child, parent;for (i = 0; iMaxN; i+)start = MaxN - 1;hcode-start = 0;child = i;parent = haffTreechild.parent;while (parent != -1)if (haffTreeparent.le

20、ftChild = child)hcode-start = 0;else hcode-start = 1;child = parent;parent = haffTreechild.parent;strcpy(codei, &hcodestart);n Huffman译码void HaffmanDecode(HaffNode haffTree)/译码结果保存在5.txt文档中FILE *fp1, *fp2;int i = 2 * MaxN - 2;char c;if (fp1 = fopen(G:学习资料信息安全基础实习ConsoleApplication1ConsoleApplication

21、12.txt, rb) = NULL)printf(Cannot Open The File!n);exit(1);if (fp2 = fopen(G:学习资料信息安全基础实习ConsoleApplication1ConsoleApplication14.txt, wb) = NULL)printf(Cannot Open The File!n);exit(1);fscanf(fp1, %c, &c);doif (c = 0) i = haffTreei.leftChild;else i = haffTreei.rightChild;if (haffTreei.leftChild = -1)f

22、putc(haffTreei.letter, fp2);i = 2 * MaxN - 2;fscanf(fp1, %c, &c); while (c != );fclose(fp1);fclose(fp2);4.3 线性分组码n 线性分组码编码void Encode()int c13, c27;string str, b1;int i = 0;FILE *fp2, *fp3;if (fp2 = fopen(G:学习资料信息安全基础实习ConsoleApplication1ConsoleApplication12.txt, r) = NULL)printf(无法打开文件!);exit(1);if

23、 (fp3 = fopen(3.txt, w) = NULL)printf(无法打开文件!);exit(1);while (!feof(fp2)fscanf(fp2, %c, &str);/将2.txt中二进制流写入str中stri = 0;int num = i;num-;for (i = 0; i num; i+)b1i = stri;if (i % 3 = 0)c10 = stri - 0;else if (i % 3 = 1)c11 = stri - 0;else if (i % 3 = 2)c12 = stri - 0;if (i + 1) % 3 = 0)c20 = c10;c21

24、 = c11;c22 = c12;c23 = c10 + c12;c24 = c10 + c11 + c12;c25 = c10 + c11;c26 = c11 + c12;for (int j = 0; j 7; j+)if (c2j = 2)c2j = 0;else if (c2j = 3)c2j = 1;fprintf(fp3, %d, c2j);/将线性分组码编码结果放在3.txt中fclose(fp3);n 线性分组码译码void Decoding() int G37=1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1;int P34,Q43,HT73

25、,R27,C3; int R17;int H47=0,S4=0,E7=0; int i,j,n,k,t=0,w; FILE *fp1,*fp2;string str;int num;i=0;if(fp1=fopen(6.txt,r)=NULL) printf(无法打开文件!); exit(1); if(fp2=fopen(G:学习资料信息安全基础实习ConsoleApplication1ConsoleApplication14.txt,w)=NULL) /将线性分组码的译码结果存入4.txt中 printf(无法打开文件!); exit(1); while(!feof(fp1) fscanf(fp1,%c,&stri+); num=i;/printf(num=%d,num);for(i=0;i3;i+) for(j=3;j7;j+) Pij-3=Gij; for(i=0;i3;i+) for(j=0;j4;j+) Qji=Pij; for(i=0;i4;i+) for(j=0;j3;j+) Hij=Qij; for(i=0;i4;i+) j=3; Hii+j=1; for(i=0;i4;i+) for(j=0;j7;j+) HTji=Hij; for(w=0;wnum;w+)if(w%7=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论