




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗1古典密碼算法一、 實驗?zāi)康耐ㄟ^編程實現(xiàn)替代密碼算法和置換密碼算法,加深對古典密碼體系的了解,為以后深入學(xué)習(xí)密碼學(xué)奠定基礎(chǔ)。二、 實驗原理古典密碼算法曾被廣泛應(yīng)用,大都比較簡單。它的主要應(yīng)用對象是文字信息,利用密碼算法實現(xiàn)文字信息的加密和解密。其中替代密碼和置換密碼是具有代表性的兩種古典密碼算法。1、 替代密碼 替代密碼算法的原理是使用替代法進(jìn)行加密,就是將明文中的字符用其他字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做對應(yīng)替換后形成密文。最早的替代密碼是由Julius Caesar 發(fā)明的Caesar (愷撒)密碼,又叫循環(huán)移位密碼。它的加密過程可以表示為下面的函數(shù)
2、: E(m) = (m+k ) mod n其中,m為明文字母在字母表中的位置數(shù);n為字母表中的字母個數(shù);k為密鑰;E(m)為密文字母在字母表中對應(yīng)的位置數(shù)。 例如,對于明文字母H,其在字母表中的位置數(shù)為8,設(shè)k=4,則按照上式計算出來的密文為L,計算過程如下: E(8) = (m+k ) mod n = (8+4 ) mod 26 = 12 = L解密算法是:m = D(L) =(L-k)mod 262、 置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實現(xiàn)明文信息的加密。置換密碼又稱為換位密碼。矩陣換位法是實現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給定的
3、順序安排在一個矩陣中,然后又根據(jù)密鑰提供的順序重新組合矩陣中的字母,從而形成密文。例如,明文為 attack begins at five ,密鑰為 cipher ,將明文按照每行6個字母的形式排在矩陣中,形成如下形式: attack begins atfive根據(jù)密鑰 cipher 中各字母在字母表中出現(xiàn)的先后順序,得到給定的一個置換: f = 1 4 5 3 2 6因此有: 密鑰: 145326 明文: attack begins atfive根據(jù)上面的置換,將原有矩陣中的字母按照第1列、第4列、第5列、第3列、第2列、第6列的順序排列、則有下面的形式:aacttk binges aivf
4、te從而得到密文:abatgftetcnvaiikse其解密過程是根據(jù)密鑰的字母數(shù)作為列數(shù),將密文按照列、行的順序?qū)懗觯俑鶕?jù)由密鑰給出的矩陣置換產(chǎn)生新的矩陣,從而恢復(fù)明文。三、 實驗環(huán)境PC機(jī),C或C+編譯環(huán)境四、 實驗內(nèi)容和步驟1、 替代算法:(1) 根據(jù)實驗遠(yuǎn)離部分對替代密碼算法的介紹,創(chuàng)建明文信息,并選擇一個密鑰k,編寫替代密碼算法的實現(xiàn)程序,實現(xiàn)加密和解密操作。 替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。(2) 結(jié)果截圖:(3) 流程圖:開始創(chuàng)建明文信息輸入密鑰加密操作解密操作結(jié)束2、 置換算法(1) 置換密碼算法的原理是不改變明文字符,只
5、將字符在明文中的排列順序改變,從而實現(xiàn)明文信息的加密。置換密碼有時又稱為換位密碼。 矩陣換位法是實現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中字母,從而形成密文。(2) 實驗截圖:(3)開始創(chuàng)建明文信息輸入密鑰加密操作解密操作結(jié)束1、 回答問題:試分析兩種密碼算法的安全性,以及如何改進(jìn)。替代密碼中使用特定的公式將結(jié)果加密并得到結(jié)果,以此并加以加密和解密,算法比較簡單。置換密碼中使用二維數(shù)組對信息進(jìn)行加密和解密,這中工作使信息安全性更好一些2、 本次實驗的體會總結(jié)。了解古典密碼算法并不代表能寫出來程序,除了寫程序要注意的各個細(xì)節(jié),
6、還要將腦海里的想法轉(zhuǎn)化為流程圖并用c語言實現(xiàn)。感覺做出的程序并不是很好,替代算法簡單一點,置換算法花費(fèi)了大量的時間,還只是勉強(qiáng)成功。意識到自己太弱,還需要付出更多的努力。替代密碼:#include<stdio.h> #include<math.h> #include<string.h> #include<conio.h>#define N 500 int main() int i=0,k,m,n,l; char str1N,str2N; /*C=M+K.K is key.*/ textbackground(RED);textcolor(LIGHT
7、GREEN);clrscr(); printf("This is a code password program.n"); printf("Please input proclaimed in writing(M):n"); gets(str1);/*輸入要加密的明文M*/ printf("Please input the key(K)(int):n"); scanf("%d",&k);/*輸入密鑰K*/ m=strlen(str1);/*測試明文的長度*/ printf("The M lengt
8、h is %dn",m); printf("ciphertext(C) is :nn"); for(i=0;i<m;i+)/*加密的過程*/ n=(int)str1i;/*將字符轉(zhuǎn)換成ASCII*/ if(str1i=' ')/*如果字符串中出現(xiàn)空格返回空格*/ printf(" "); str2i=str1i; else if(n>96&&n<123)/*對小寫進(jìn)行加密*/ n=(n-97+k)%26; if(n<0) n=26+n; l=(char)(n+97); printf(&qu
9、ot;%c",l); str2i=l; else if(n>64&&n<91)/*對大寫進(jìn)行加密*/ n=(n-65+k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); str2i=l; str2i='0' /*-*/ printf("nnThe C length is %d",strlen(str2); printf("When the ciphertext is '%s',nThe password prog
10、ram is.:nn",str2); m=strlen(str2); for(i=0;i<m;i+)/*解密過程*/ n=(int)str2i;/*將字符轉(zhuǎn)換成ASCII*/ if(str2i=' ')/*如果是空格,返回的也是空格*/ printf(" "); else if(n>96&&n<123)/*對小寫進(jìn)行解密*/ n=(n-97-k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); else if(n>64&
11、&n<91)/*對大寫進(jìn)行解密*/ n=(n-65-k)%26; if(n<0) n=26+n; l=(char)(n+97); printf("%c",l); str1i='0' getch(); return 0; 置換算法:#include<stdio.h> #include<math.h> #include<string.h>#include<conio.h> #define N 100 int main() /*-*/ int i,j,lenK,lenM,m,n,temp; int
12、 TN; char KN,MN,CN,Temp1N,Temp2N,Temp3N;textbackground(GREEN);textcolor(RED); clrscr(); /*-*/ printf("This is a substitution cipher.n"); printf("Please input the M:n");/*輸入明文M*/ gets(M); printf("Please input the K:n");/*輸入密鑰K*/ gets(K); lenK=strlen(K); lenM=strlen(M);/*
13、測設(shè)長度*/ m=lenM/lenK; n=lenK;/*定義矩陣的長和寬*/ for(i=0;i<lenK;i+)/*對密鑰進(jìn)行數(shù)字排序*/ temp=0; for(j=0;j<lenK;j+) if(int)Ki<(int)Kj) temp+=1; Ti=lenK-temp; printf("%d ",Ti);/*輸出各字符對應(yīng)的數(shù)字順序*/ /*-*/ printf("nnFirst.nn"); for(i=0;i<m;i+)/*根據(jù)密鑰將明文排列成矩陣*/ for(j=0;j<n;j+) Temp1i*lenK+j=
14、Mi*lenK+j; printf("%c ",Temp1i*lenK+j); printf("n"); Temp1lenM='0' /*-*/ printf("nSecond.nn");/*進(jìn)行第一次置換*/ for(i=0;i<lenK;i+) for(j=0;j<m;j+) Temp2j*lenK+i=Temp1j*lenK+Ti-1; Temp2lenM='0' for(i=0;i<m;i+) for(j=0;j<lenK;j+) printf("%c ",Temp2i*lenK+j); printf("n"); /*-*/ printf("nThird.nn");/*進(jìn)行第二次置換*/ for(i=0;i<lenK;i+) for(j=0;j<m;j+) Temp3j*lenK+i=Temp2j*lenK+Ti-1; Temp3lenM='0' for(i=0;i<m;i+) for(j=0;j<l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 康復(fù)醫(yī)療服務(wù)體系2025年構(gòu)建與運(yùn)營模式創(chuàng)新案例分析報告
- 2025年電商平臺內(nèi)容營銷與種草經(jīng)濟(jì)在寵物美容院行業(yè)的應(yīng)用案例報告
- 2025屆河北承德市隆化縣七下英語期末預(yù)測試題含答案
- 面向2025年工業(yè)互聯(lián)網(wǎng)平臺的網(wǎng)絡(luò)隔離技術(shù)在網(wǎng)絡(luò)安全技術(shù)應(yīng)用應(yīng)用研究中的應(yīng)用報告001
- 2025年工業(yè)互聯(lián)網(wǎng)平臺邊緣計算硬件架構(gòu)在智能安防中的應(yīng)用報告
- 2025年醫(yī)院信息化建設(shè)電子病歷系統(tǒng)優(yōu)化與醫(yī)療信息化人才培養(yǎng)體系研究報告
- 2025年綠色消費(fèi)理念傳播對消費(fèi)者綠色家電消費(fèi)的影響報告
- 2025年天然氣水合物(可燃冰)開采技術(shù)深度剖析與未來展望報告
- 工業(yè)互聯(lián)網(wǎng)平臺RFID技術(shù)在家政清潔服務(wù)行業(yè)的應(yīng)用實踐報告
- 2025年醫(yī)藥物流行業(yè)合規(guī)運(yùn)營與信息化系統(tǒng)藥品銷售渠道整合報告
- 2022年中國醫(yī)學(xué)科學(xué)院放射醫(yī)學(xué)研究所高層次人才引進(jìn)筆試備考題庫及答案解析
- 工程地質(zhì)學(xué)實習(xí)報告
- 大班幼兒自主建構(gòu)游戲:搭雞窩 課件
- 信息檢索智慧樹知到答案章節(jié)測試2023年齊魯工業(yè)大學(xué)
- 鋁鎂錳金屬屋面專項施工組織設(shè)計
- 攪拌器的型式
- 傳感器原理 磁電式傳感器
- XX印務(wù)有限公司采購控制程序
- 2.溝槽開挖(檢驗批)質(zhì)量驗收記錄表
- GB/T 8433-1998紡織品色牢度試驗?zāi)吐然味?游泳池水)
- GB/T 12719-2021礦區(qū)水文地質(zhì)工程地質(zhì)勘查規(guī)范
評論
0/150
提交評論