實(shí)驗(yàn)1-古典密碼算法_第1頁
實(shí)驗(yàn)1-古典密碼算法_第2頁
實(shí)驗(yàn)1-古典密碼算法_第3頁
實(shí)驗(yàn)1-古典密碼算法_第4頁
實(shí)驗(yàn)1-古典密碼算法_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)1古典密碼算法一、 實(shí)驗(yàn)?zāi)康耐ㄟ^編程實(shí)現(xiàn)替代密碼算法和置換密碼算法,加深對(duì)古典密碼體系的了解,為以后深入學(xué)習(xí)密碼學(xué)奠定基礎(chǔ)。二、 實(shí)驗(yàn)原理古典密碼算法曾被廣泛應(yīng)用,大都比較簡(jiǎn)單。它的主要應(yīng)用對(duì)象是文字信息,利用密碼算法實(shí)現(xiàn)文字信息的加密和解密。其中替代密碼和置換密碼是具有代表性的兩種古典密碼算法。1、 替代密碼 替代密碼算法的原理是使用替代法進(jìn)行加密,就是將明文中的字符用其他字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做對(duì)應(yīng)替換后形成密文。最早的替代密碼是由Julius Caesar 發(fā)明的Caesar (愷撒)密碼,又叫循環(huán)移位密碼。它的加密過程可以表示為下面的函數(shù)

2、: E(m) = (m+k ) mod n其中,m為明文字母在字母表中的位置數(shù);n為字母表中的字母?jìng)€(gè)數(shù);k為密鑰;E(m)為密文字母在字母表中對(duì)應(yīng)的位置數(shù)。 例如,對(duì)于明文字母H,其在字母表中的位置數(shù)為8,設(shè)k=4,則按照上式計(jì)算出來的密文為L(zhǎng),計(jì)算過程如下: E(8) = (m+k ) mod n = (8+4 ) mod 26 = 12 = L解密算法是:m = D(L) =(L-k)mod 262、 置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實(shí)現(xiàn)明文信息的加密。置換密碼又稱為換位密碼。矩陣換位法是實(shí)現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給定的

3、順序安排在一個(gè)矩陣中,然后又根據(jù)密鑰提供的順序重新組合矩陣中的字母,從而形成密文。例如,明文為 attack begins at five ,密鑰為 cipher ,將明文按照每行6個(gè)字母的形式排在矩陣中,形成如下形式: attack begins atfive根據(jù)密鑰 cipher 中各字母在字母表中出現(xiàn)的先后順序,得到給定的一個(gè)置換: 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ù)明文。三、 實(shí)驗(yàn)環(huán)境PC機(jī),C或C+編譯環(huán)境四、 實(shí)驗(yàn)內(nèi)容和步驟1、 替代算法:(1) 根據(jù)實(shí)驗(yàn)遠(yuǎn)離部分對(duì)替代密碼算法的介紹,創(chuàng)建明文信息,并選擇一個(gè)密鑰k,編寫替代密碼算法的實(shí)現(xiàn)程序,實(shí)現(xiàn)加密和解密操作。 替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。(2) 結(jié)果截圖:(3) 流程圖:開始創(chuàng)建明文信息輸入密鑰加密操作解密操作結(jié)束2、 置換算法(1) 置換密碼算法的原理是不改變明文字符,只

5、將字符在明文中的排列順序改變,從而實(shí)現(xiàn)明文信息的加密。置換密碼有時(shí)又稱為換位密碼。 矩陣換位法是實(shí)現(xiàn)置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個(gè)矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中字母,從而形成密文。(2) 實(shí)驗(yàn)截圖:(3)開始創(chuàng)建明文信息輸入密鑰加密操作解密操作結(jié)束1、 回答問題:試分析兩種密碼算法的安全性,以及如何改進(jìn)。替代密碼中使用特定的公式將結(jié)果加密并得到結(jié)果,以此并加以加密和解密,算法比較簡(jiǎn)單。置換密碼中使用二維數(shù)組對(duì)信息進(jìn)行加密和解密,這中工作使信息安全性更好一些2、 本次實(shí)驗(yàn)的體會(huì)總結(jié)。了解古典密碼算法并不代表能寫出來程序,除了寫程序要注意的各個(gè)細(xì)節(jié),

6、還要將腦海里的想法轉(zhuǎn)化為流程圖并用c語言實(shí)現(xiàn)。感覺做出的程序并不是很好,替代算法簡(jiǎn)單一點(diǎn),置換算法花費(fèi)了大量的時(shí)間,還只是勉強(qiáng)成功。意識(shí)到自己太弱,還需要付出更多的努力。替代密碼:#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);/*測(cè)試明文的長(zhǎng)度*/ 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)/*對(duì)小寫進(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)/*對(duì)大寫進(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)/*對(duì)小寫進(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)/*對(duì)大寫進(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、測(cè)設(shè)長(zhǎng)度*/ m=lenM/lenK; n=lenK;/*定義矩陣的長(zhǎng)和寬*/ for(i=0;i<lenK;i+)/*對(duì)密鑰進(jìn)行數(shù)字排序*/ temp=0; for(j=0;j<lenK;j+) if(int)Ki<(int)Kj) temp+=1; Ti=lenK-temp; printf("%d ",Ti);/*輸出各字符對(duì)應(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論