




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗1古典密碼算法一、 實驗目的通過編程實現替代密碼算法和置換密碼算法,加深對古典密碼體系的了解,為以后深入學習密碼學奠定基礎。二、 實驗原理古典密碼算法曾被廣泛應用,大都比較簡單。它的主要應用對象是文字信息,利用密碼算法實現文字信息的加密和解密。其中替代密碼和置換密碼是具有代表性的兩種古典密碼算法。1、 替代密碼 替代密碼算法的原理是使用替代法進行加密,就是將明文中的字符用其他字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做對應替換后形成密文。最早的替代密碼是由Julius Caesar 發明的Caesar (愷撒)密碼,又叫循環移位密碼。它的加密過程可以表示為下面的函數
2、: E(m) = (m+k ) mod n其中,m為明文字母在字母表中的位置數;n為字母表中的字母個數;k為密鑰;E(m)為密文字母在字母表中對應的位置數。 例如,對于明文字母H,其在字母表中的位置數為8,設k=4,則按照上式計算出來的密文為L,計算過程如下: E(8) = (m+k ) mod n = (8+4 ) mod 26 = 12 = L解密算法是:m = D(L) =(L-k)mod 262、 置換密碼置換密碼算法的原理是不改變明文字符,只將字符在明文中的排列順序改變,從而實現明文信息的加密。置換密碼又稱為換位密碼。矩陣換位法是實現置換密碼的一種常用方法。它將明文中的字母按照給定的
3、順序安排在一個矩陣中,然后又根據密鑰提供的順序重新組合矩陣中的字母,從而形成密文。例如,明文為 attack begins at five ,密鑰為 cipher ,將明文按照每行6個字母的形式排在矩陣中,形成如下形式: attack begins atfive根據密鑰 cipher 中各字母在字母表中出現的先后順序,得到給定的一個置換: f = 1 4 5 3 2 6因此有: 密鑰: 145326 明文: attack begins atfive根據上面的置換,將原有矩陣中的字母按照第1列、第4列、第5列、第3列、第2列、第6列的順序排列、則有下面的形式:aacttk binges aivf
4、te從而得到密文:abatgftetcnvaiikse其解密過程是根據密鑰的字母數作為列數,將密文按照列、行的順序寫出,再根據由密鑰給出的矩陣置換產生新的矩陣,從而恢復明文。三、 實驗環境PC機,C或C+編譯環境四、 實驗內容和步驟1、 替代算法:(1) 根據實驗遠離部分對替代密碼算法的介紹,創建明文信息,并選擇一個密鑰k,編寫替代密碼算法的實現程序,實現加密和解密操作。 替代密碼包括多種類型,如單表替代密碼、多明碼替代密碼、多字母替代密碼、多表替代密碼等。(2) 結果截圖:(3) 流程圖:開始創建明文信息輸入密鑰加密操作解密操作結束2、 置換算法(1) 置換密碼算法的原理是不改變明文字符,只
5、將字符在明文中的排列順序改變,從而實現明文信息的加密。置換密碼有時又稱為換位密碼。 矩陣換位法是實現置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然后用根據密鑰提供的順序重新組合矩陣中字母,從而形成密文。(2) 實驗截圖:(3)開始創建明文信息輸入密鑰加密操作解密操作結束1、 回答問題:試分析兩種密碼算法的安全性,以及如何改進。替代密碼中使用特定的公式將結果加密并得到結果,以此并加以加密和解密,算法比較簡單。置換密碼中使用二維數組對信息進行加密和解密,這中工作使信息安全性更好一些2、 本次實驗的體會總結。了解古典密碼算法并不代表能寫出來程序,除了寫程序要注意的各個細節,
6、還要將腦海里的想法轉化為流程圖并用c語言實現。感覺做出的程序并不是很好,替代算法簡單一點,置換算法花費了大量的時間,還只是勉強成功。意識到自己太弱,還需要付出更多的努力。替代密碼:#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;/*將字符轉換成ASCII*/ if(str1i=' ')/*如果字符串中出現空格返回空格*/ printf(" "); str2i=str1i; else if(n>96&&n<123)/*對小寫進行加密*/ 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)/*對大寫進行加密*/ 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;/*將字符轉換成ASCII*/ if(str2i=' ')/*如果是空格,返回的也是空格*/ printf(" "); else if(n>96&&n<123)/*對小寫進行解密*/ 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)/*對大寫進行解密*/ 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、測設長度*/ m=lenM/lenK; n=lenK;/*定義矩陣的長和寬*/ for(i=0;i<lenK;i+)/*對密鑰進行數字排序*/ temp=0; for(j=0;j<lenK;j+) if(int)Ki<(int)Kj) temp+=1; Ti=lenK-temp; printf("%d ",Ti);/*輸出各字符對應的數字順序*/ /*-*/ printf("nnFirst.nn"); for(i=0;i<m;i+)/*根據密鑰將明文排列成矩陣*/ 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");/*進行第一次置換*/ 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");/*進行第二次置換*/ 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業園區的消防安全管理體系
- 工業智能產品的設計與生產管理
- 工業機器人技術與應用發展趨勢分析
- 工業機器人技術及其在自動化生產中的應用
- 工業廢水處理案例分析
- 工業機器人發展現狀及未來趨勢
- 工業污染防治的智能化手段-智測系統介紹
- 工業綠色發展與環境保護
- 工業物聯網IIoT技術及其應用前景
- 工業自動化控制系統的優化策略
- 機器視覺課件
- 2022年廣東省普通高等院校校招收中等職業學校畢業生統一考試英語試卷及答案
- 工會委員增補選舉辦法 工會委員選舉辦法
- 危險源辨識、風險評價清單(市政(管道)工程)
- DIN985 尼龍鎖緊螺母
- 煤矸石綜合利用復墾項目環評報告書
- 我的家鄉福州PPT課件
- C5116A立式車床的PLC控制
- 曲線正矢、付矢、超高、加寬(中分法)計算表
- 北師大版初中數學定理、公式匯編(共20頁)
- 迎風飄揚的旗歌譜二聲部
評論
0/150
提交評論