實驗
一、傳統密碼演算法
一、實驗目的及任務
通過程式設計實現替代密碼演算法和置換密碼演算法,加深對古典密碼體制的了解,為深入學習密碼學奠定基礎
二、實驗環境
執行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...