




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、信息安全基礎實習報告姓 名: 學 號: 班 級: 指導老師: 1.問題描述通信系統(tǒng)模型反映了各種通信系統(tǒng)的共同特性,對通信系統(tǒng)模型的研究有助于找出信息傳輸過程中的共同規(guī)律,以提高信息傳輸的可靠性、有效性、保密性和認證性。本課題的任務是針對文本文件(txt文件)或圖像文件(bmp文件)對信源編(譯)碼,信道編(譯)碼部分編程實現,并分析實驗數據。2.需求分析該通信系統(tǒng)模型主要有四個模塊:信源編碼(Huffman編碼)、信道編碼(線性分組碼)、信道解碼、信源解碼。編碼對象:圖像(test1.bmp)信源編碼算法: 哈弗曼編碼信源編碼結果:文本(2.txt)信道編碼算法: 線性分組碼信道編碼結果:文
2、本(3.txt)統(tǒng)計壓縮率統(tǒng)計傳輸率信源譯碼:文本5.txt)解碼結果:圖像(test2.bmp)信道譯碼結果:文本(4.txt)讀像素:文本(1.txt)根據實驗要求,需要讀寫文件,本文選擇的是讀取圖像文件,涉及到讀取圖像文件的知識。3.算法分析3.1Huffman編碼Huffman算法是一種基于統(tǒng)計的壓縮方法。它的本質就是對文本文件中的字符進行重新編碼,對于使用頻率越高的字符,其編碼也越短。但是任何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序列(從碼數的根到終節(jié)點)。哈夫曼譯碼過程與編碼過程相反,譯碼過程就是分解電文中字符串的過程,具體步驟如下:首先輸入要一點問的二進制編碼,然后從哈夫曼樹的根結點出發(fā),對于電文的二進制編碼,按照二進制位串中的0和1確定
4、是進入左分支還是右分支:若編碼為0,則進入結點的左孩子,否則進入結點的右孩子,一旦到達葉結點,就譯出該葉子結點所代表字符。3.2線性分組碼(7,3)碼線性分組碼是一類奇偶校驗碼,它可以由(n,k)形式表示,編碼器將一個k比特信息分組(信息矢量)轉變?yōu)橐粋€更長的由給定元素符號集組成的n比特編碼分組,當這個符號集包含兩個元素(0和1),與二進制相對,稱為二進制編碼。分組碼是對每段k位長的信息組,以一定規(guī)則增加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),通常用于前向糾錯。在分組碼中,監(jiān)督位加到信息位之后,形成新碼,在編碼中,k個信息位,被編為n位長度,(n-k)個監(jiān)督碼的作用是實現檢錯和糾錯。n 編碼原理(1)根據給定的生成矩陣G,求得監(jiān)督碼與信息碼之間呈線性關系即編碼方程。 (2)輸入信息碼,代入上
6、述編碼方程中,得到各監(jiān)督碼。 (3)監(jiān)督碼附帶在信息碼之后,一起輸出,即得到編碼結果。已知線性分組碼的生成矩陣 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 信息碼、監(jiān)督碼、許用碼對照表信息組監(jiān)督碼碼字00000000000000001110100111010100111010
7、01110111010011101010011101001110101001110100111101001110100111101001110100n 譯碼原理(1)根據生成矩陣計算出監(jiān)督矩陣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 監(jiān)督矩陣 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)得監(jiān)督矩陣 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; /從文件頭到實際位圖數據的偏移字節(jié)數BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADERDWORD biSize; /信息頭大小LONG biWidth; /圖像寬度LONG biHeight; /
10、圖像高度WORD biPlanes; /位平面數,必須為1WORD biBitCount; /每像素位數DWORD biCompression; /壓縮類型DWORD biSizeImage; /壓縮圖像大小字節(jié)數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樹構造構造哈夫曼樹非常簡單,將所有的節(jié)點放到一個隊列中,用一個節(jié)點替換兩個
16、頻率最低的節(jié)點,新節(jié)點的頻率就是這兩個節(jié)點的頻率之和。這樣,新節(jié)點就是兩個被替換節(jié)點的父節(jié)點了。如此循環(huán),直到隊列中只剩一個節(jié)點(樹根)。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編碼解壓縮比構造哈夫曼樹要簡單的多,將輸入緩沖區(qū)中的每個編碼用對應的ASCII碼逐個替換就可以了。只要記住,這里的輸入緩沖區(qū)是一個包含每個ASCII值的編碼的位流。因此,為了用ASCII值替
19、換編碼,我們必須用位流搜索哈夫曼樹,直到發(fā)現一個葉節(jié)點,然后將它的ASCII值添加到輸出緩沖區(qū)中: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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新生兒臂叢神經損傷的臨床護理
- 《如何在手機上制作課件》
- 2025汽車銷售合同范本2
- 2025博爾特委托試驗合同
- 2025關于租賃合同的管轄問題案例分析
- 深圳七下生物期末試卷及答案
- 陜西中考試卷及答案全套b卷
- 2025年買賣食品的合同范本
- 浙江國企招聘2025溫州機場集團招聘31人筆試參考題庫附帶答案詳解
- 電容器在數據中心電力系統(tǒng)的優(yōu)化設計考核試卷
- 2025年四川成都地鐵運營有限公司招聘筆試參考題庫含答案解析
- 【MOOC】《學術交流英語》(東南大學)章節(jié)中國大學慕課答案
- 幼兒園閱讀活動環(huán)境創(chuàng)設
- 環(huán)保公司簡介范文6篇范文
- 如何與人有效溝通培訓
- 食品企業(yè)生產部門質量獎懲條例
- 《婦產科學》課件-15.3絕經綜合征
- 幼兒園中班彩虹泡泡龍課件
- 酒精飲料制作操作指南
- 六年級數學下冊 典型例題系列之期中專項練習:解比例或解方程(蘇教版)
- 城市地下管網建設項目風險評估報告
評論
0/150
提交評論