ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:173.64KB ,
资源ID:18986391      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18986391.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息安全基础实习报告Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息安全基础实习报告Word文件下载.docx

1、k个检验元,组成长为n的序列:,称这个序列为码字。在二进制情况下,信息组总共有k2个,因此通过编码器后,相应的码字也有k2个,称这k2个码字集合为(,k)分组码。n长序列的可能排列总共有n2种。称被选取的k2个n重为许用码组,其余kn22 个为禁用码组,称Rk/n为码率。那么对于(7,3)码即为用7位长的序列表示3位信息码,7位长序列的可能排列总共有128个。许用码组有8个,其余128-8=120个禁用码组,码率为R=3/7=42.86%。对于长度为n的二进制分组码,可以表示成(n,k),通常用于前向纠错。在分组码中,监督位加到信息位之后,形成新码,在编码中,k个信息位,被编为n位长度,(n-

2、k)个监督码的作用是实现检错和纠错。 编码原理(1)根据给定的生成矩阵G,求得监督码与信息码之间呈线性关系即编码方程。(2)输入信息码,代入上述编码方程中,得到各监督码。(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所以由上式可以得到编码方程组C6 = C6C5 = C5C4= C4=+表1 信息码、监督码、许用码对

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

4、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 0Ir = 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 0Q = 1 1 0 0 0 1 0 (9) 0 1 1 0 0 0 14.算法实现4.1图片处理 定义结构体/位图文件头定义;/其中不包含文件类型信息(由于结构体的内存结构决定,/要是加了的话将不能正确读取文件信息)t

5、ypedef struct tagBITMAPFILEHEADER /WORD bfType; /文件类型,必须是0x424D,即字符“BM” DWORD bfSize; /文件大小 WORD bfReserved1; /保留字 WORD bfReserved2; DWORD bfOffBits; /从文件头到实际位图数据的偏移字节数BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER DWORD biSize; /信息头大小 LONG biWidth; /图像宽度 LONG biHeight; /图像高度 WORD biPlanes; /位平

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

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

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

9、fo.biClrUsed; nCounti+) fread(char *)&(strPlanCounti.rgbBlue), 1, sizeof(BYTE), fpi);(strPlanCounti.rgbGreen), 1, sizeof(BYTE), fpi);(strPlanCounti.rgbRed), 1, sizeof(BYTE), fpi);(strPlanCounti.rgbReserved), 1, sizeof(BYTE), fpi); strInfo.biWidth = (strInfo.biWidth * sizeof(IMAGEDATA)+3) / 4 * 4; lo

10、ng 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) (*(imageDataPtr + i * width + j).blue = 0; /(*(imageDataPtr + i * width +

11、j).green = 0; /(*(imageDataPtr + i * width + j).red = 0; fread(imageDataPtr, sizeof(struct tagIMAGEDATA) * width, height, fpi); fclose(fpi);t原文件读取完毕! return true;4.2 Huffman解压缩 Huffman树构造构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。void Haffm

12、an(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; haffTreei.rightChild = -1;MaxN - 1; m1 = m2 = MaxValue; x1 = x2 = 0; for

13、(j = 0; jMaxN + i; j+) if (haffTreej.weightm1&haffTreej.flag = 0) m2 = m1; x2 = x1; m1 = haffTreej.weight; x1 = j; else if (haffTreej.weightm2& m2 = haffTreej.weight; x2 = j; haffTreex1.parent = MaxN + i; haffTreex2.parent = MaxN + i; haffTreex1.flag = 1; haffTreex2.flag = 1; haffTreeMaxN + i.weight

14、 = haffTreex1.weight + haffTreex2.weight; haffTreeMaxN + i.leftChild = x1; haffTreeMaxN + i.rightChild = x2; Huffman编码解压缩比构造哈夫曼树要简单的多,将输入缓冲区中的每个编码用对应的ASCII码逐个替换就可以了。只要记住,这里的输入缓冲区是一个包含每个ASCII值的编码的位流。因此,为了用ASCII值替换编码,我们必须用位流搜索哈夫曼树,直到发现一个叶节点,然后将它的ASCII值添加到输出缓冲区中:void HaffmanEncode(HaffNode haffTree, ch

15、ar codeMaxNMaxN)/编码结果保存在2.txt文档中 char hcodeMaxN; int start, i, child, parent;MaxN; start = MaxN - 1; hcode-start = 0; child = i; parent = haffTreechild.parent; while (parent != -1) if (haffTreeparent.leftChild = child) hcode-start = 0 else hcode-start = 1 child = parent; parent = haffTreechild.paren

16、t; strcpy(codei, &hcodestart); Huffman译码void HaffmanDecode(HaffNode haffTree)/译码结果保存在5.txt文档中 FILE *fp1, *fp2; int i = 2 * MaxN - 2; char c; if (fp1 = fopen(学习资料信息安全基础实习ConsoleApplication1ConsoleApplication12.txt) = NULL) printf(Cannot Open The File! exit(1); if (fp2 = fopen(学习资料信息安全基础实习ConsoleAppli

17、cation1ConsoleApplication14.txtwb fscanf(fp1, %c, &c); do if (c = ) i = haffTreei.leftChild; else i = haffTreei.rightChild; if (haffTreei.leftChild = -1) fputc(haffTreei.letter, fp2); i = 2 * MaxN - 2; fscanf(fp1, while (c != fclose(fp1); fclose(fp2);4.3 线性分组码 线性分组码编码void Encode() int c13, c27; stri

18、ng str, b1; int i = 0; FILE *fp2, *fp3;r无法打开文件! if (fp3 = fopen(3.txtw while (!feof(fp2) fscanf(fp2, str);/将2.txt中二进制流写入str中 stri = int num = i; num-; num; b1i = stri; if (i % 3 = 0) c10 = stri - else if (i % 3 = 1) c11 = stri - else if (i % 3 = 2) c12 = stri - if (i + 1) % 3 = 0) c20 = c10; c21 = c

19、11; c22 = c12; c23 = c10 + c12; c24 = c10 + c11 + c12; c25 = c10 + c11; c26 = c11 + c12; for (int j = 0; 7; if (c2j = 2) c2j = 0; else if (c2j = 3) c2j = 1; fprintf(fp3, %d, c2j);/将线性分组码编码结果放在3.txt中 fclose(fp3); 线性分组码译码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,HT

20、73,R27,C3; int R17; int H47=0,S4=0,E7=0; int i,j,n,k,t=0,w; FILE *fp1,*fp2; stringstr; int num; i=0; if(fp1=fopen(6.txt,)=NULL) printf( exit(1); if(fp2=fopen()=NULL) /将线性分组码的译码结果存入4.txt中 while(!feof(fp1) fscanf(fp1,&stri+); num=i; /printf(num=%d,num); for(i=0;i3;i+) for(j=3;j7;j+) Pij-3=Gij; for(j=0;4; Qji=Pij; Hij=Qij; j=3; Hii+j=1; HTji=Hij; for(w=0;wnum;w+) if(w%7=0) R10=strw- else if(w%7=1) R11=strw- else if(w%7=2) R12=strw- else if(w%7=3) R13=strw- else if(w%7=4) R14=strw- else if(w%7=5) R15=strw- else if(w%7=6) R16=strw- int S4=0; int E7=0; t=0; if(w+1)%7=0) for(i=0; for(j=0; Si=Si+R

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1