古典密碼學上機實驗

2021-06-26 15:18:26 字數 3025 閱讀 6111

實驗

一、傳統密碼演算法

一、實驗目的及任務

通過程式設計實現替代密碼演算法和置換密碼演算法,加深對古典密碼體制的了解,為深入學習密碼學奠定基礎

二、實驗環境

執行windows作業系統的pc機,具有c語言編譯環境。

三、實驗原理

古典密碼演算法歷史上曾被廣泛應用,大都比較簡單,使用手工和機械操作來實現加密和解密.它的主要應用物件是文字資訊,利用密碼演算法實現文字資訊的加密和解密.下面介紹兩種常見的具有代表性的古典密碼演算法,以幫助讀者對密碼演算法建立乙個初步的印象.

1. 替代密碼 

替代密碼演算法的原理是使用替代法進行加密,就是將明文中的字元用其它字元替代後形成密文.例如:明文本母a,b,c,d ,用d,e,f,g做對應替換後形成密文. 

替代密碼包括多種型別,如單錶替代密碼,多明碼替代密碼,多字母替代密碼,多表替代密碼——.

1)下面我們先介紹一種典型的單錶替代密碼,愷撒(caesar)密碼,又叫迴圈移位密碼.它的加密方法,就是將明文中的每個字母用此字元在字母表中後面第k個字母替代.它的加密過程可以表示為下面的函式: 

e(m)=(m+k) mod n 

其中:m為明文本母在字母表中的位置數;n為字母表中的字母個數;k為金鑰;e(m)為密文字母在字母表中對應的位置數. 

例如,對於明文本母h,其在字母表中的位置數為7,設k=4,則按照上式計算出來的密文為l: 

e(7) = (m+k) mod n = (7+4) mod 26 = 11 = l 

2)下面是一種典型的多表替代密碼:維吉尼亞密碼,它選擇乙個片語作為金鑰,金鑰中每個字母用來確定乙個代換表,每個金鑰字母用來加密乙個明文本母。例如金鑰字母為a,明文本母為c,則密文字母為0+2(mod26)=2,也就是c。直到所有的金鑰字母用完,後再從頭開始,使用第乙個金鑰字母加密。也就是說,金鑰迴圈使用。

例:明文為attack begins at five,金鑰為cipher,

attack begins at five    明文

+   cipher cipher ci pher    金鑰

=   cbihgb dmvprj cb upzv    密文

去除空格後為cbihgbdmvprjcbupzv

2. 置換密碼 

置換密碼演算法的原理是不改變明文本元,只將字元在明文中的排列順序改變,從而實現明文資訊的加密.置換密碼有時又稱為換位密碼.

矩陣換位法是實現置換密碼的一種常用方法.它將明文中的字母按照給的順序安排在乙個矩陣中,然後用根據金鑰提供的順序重新組合矩陣中字母,從而形成密文.例如,明文為attack begins at five,金鑰為cipher,將明文按照每行6列的形式排在矩陣中,形成如下形式: 

a t t a c k 

b e g i n s 

a t f i v e 

根據金鑰cipher中各字母在字母表中出現的先後順序,給定乙個置換: 

1 2 3 4 5 6 

f=                                          1 4 5 3 2 6 1

根據上面的置換,將原有矩陣中的字母按照第1列,第4列,第5列,第3列,第2列,第6列的順序排列,則有下面形式: 

a a c t t k

b i n g e s 

a i v f t e 

從而得到密文:abatgftetcnvaiikse 

其解密的過程是根據金鑰的字母數作為列數,將密文按照列,行的順序寫出,再根據由金鑰給出的矩陣置換產生新的矩陣,從而恢復明文. 

四、 實驗步驟

(1)根據實驗原理部分對替代密碼演算法的介紹,自己建立明文資訊,並選擇乙個金鑰k,編寫替代密碼演算法的實現程式,實現加密和解密操作. 

(2)根據實驗原理部分對置換密碼演算法的介紹,自己建立明文資訊,並選擇乙個金鑰,編寫置換密碼演算法的實現程式,實現加密和解密操作.

五:實驗結果:

1:l2:abatgftetcnvaiikse

六、實驗思考題

1:替代密碼的原理是什麼?

2:置換密碼的原理是什麼?

替代密碼**如下:

#include#include#include#define n 500

int main()

else if(n>64&&n<91)/*對大寫進行加密*/

} str2[i]='\0';

/*--------------------------------*/

printf("\n\nthe c length is %d",strlen(str2));

printf("\n\n *\n *\n *\n***\n *\n");

printf("when the ciphertext is '%s',\nthe password program is...::\n\n",str2);

m=strlen(str2);

for(i=0;i96&&n<123)/*對小寫進行解密*/

else if(n>64&&n<91)/*對大寫進行解密*/

} str1[i]='\0';

return 0;

}

置換密碼**如下:

#include#include#include#define n 100

int main(){

/*----------------------------*/

int i,j,lenk,lenm,m,n,temp;

int t[n];

char k[n],m[n],c[n],temp1[n],temp2[n],te***[n];

/*----------------------------*/

printf("輸入明文m\n");/*輸入明文m*/

gets(m);

printf("輸入金鑰k\n");/*輸入金鑰k*/

gets(k);

lenk=strlen(k);

lenm=strlen(m);/*測設長度*/

m=lenm/lenk;

n=lenk;/*定義矩陣的長和寬*/

for(i=0;i

古典密碼學 移位密碼

首先了解密碼學的基本目的是使得兩個在不安全的通道中通訊的人,通常稱為alice和bob,以一種使他們的敵手oscar不能明白和理解通訊內容的方式進行通訊。定義 乙個密碼體制是滿足以下條件的五元組 p,c,k,e,d 1.p代表所有可能的明文組成的有限集。2.c代表所有可能的密文組成的有限集。3.k代...

密碼學課設實驗 古典密碼c 實現

一 實驗目的 通過實現簡單的古典密碼演算法,理解密碼學的相關概念如明文 plaintext 密文 ciphertext 加密金鑰 encryption key 解密金鑰 decryption key 加密演算法 encryption algorithm 解密演算法 decryption algori...

密碼學學習一 古典密碼學

使用固定資訊,將原文替換成密文 單錶替換的原文和密文是同一張表 如原文密文關係如下 a b b c c d d e e f 則bee的密文就是cff 多表替換的原文和密文存在多張表中 表1 a b b c c d d e e f 表2 a c b d c e d f e g 原文 bee 金鑰 12...