現(xiàn)代密碼學與加解密技術實驗報告_第1頁
現(xiàn)代密碼學與加解密技術實驗報告_第2頁
現(xiàn)代密碼學與加解密技術實驗報告_第3頁
現(xiàn)代密碼學與加解密技術實驗報告_第4頁
現(xiàn)代密碼學與加解密技術實驗報告_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、現(xiàn)代密碼學與加解密技術實驗一、 實驗教學目標與基本要求現(xiàn)代密碼學與加解密技術實驗是本課程重要的實踐教學環(huán)節(jié)。實驗的目的不僅僅是驗證理論知識,更重要的是通過實驗加強學生的實驗手段與實踐技能,培養(yǎng)學生分析問題、解決問題、應用知識的能力和創(chuàng)新精神,全面提高學生的綜合素質。通過本實驗簡要了解密碼學以及現(xiàn)代密碼算法的基本知識,學會常用文件加密的實現(xiàn)、了解系統(tǒng)加密解密技術,具體掌握幾種加解密方法。實驗后完成要求撰寫實驗報告,報告內容包括題目、測試數(shù)據、運行結果、遇到的問題和解決方法、關鍵代碼或程序清單,學生可以在實驗報告中提出對實驗的建議和意見。二、 實驗項目及教學安排序號實驗項目名稱基本內容實驗學時每組

2、人數(shù)實驗要求實驗類型1Vigenere的編程實現(xiàn)編程(建議使用C語言)實現(xiàn)古典密碼體制中的Vigenere密碼,并加/解密一個字符串或文件21必修設計性2Column permutation cipher 的編程實現(xiàn)編程(建議使用C語言)實現(xiàn)古典密碼體制中的Column permutation密碼,并加/解密一個字符串或文件21必修設計性3DES的編程實現(xiàn)使用C語言設計實現(xiàn)DES密碼,并加密一個文件41必修設計性三、 實驗成績考核辦法 每次實驗后,要求從以下幾個方面書寫實驗報告:實驗題目,程序清單,實驗用數(shù)據及結果,學生可以在實驗報告中提出對實驗的建議和意見。實驗成績滿分100分,并按10%折

3、算記入課程總成績,實驗成績不合格者不得參加期末考試。實驗成績按下面7條進行考核評定。(1)做好實驗內容的預習,寫出預習報告;占10%。(2)了解實驗題目的調試方法;占10%。(3)按實驗要求預先設計好程序;占10%。(4)認真記錄實驗數(shù)據并分析實驗結果;占10%。(5)實驗后按要求書寫實驗報告,記錄實驗用數(shù)據及運行結果;占30%。(6)創(chuàng)新能力強,在實驗中設計的程序有一定的通用性,算法優(yōu)化;20%。(7)實驗過程中,具有嚴謹?shù)膶W習態(tài)度,認真、踏實、一絲不茍的科學作風;10%四、 實驗教材及參考書1.Richard J.Spillman:CLASSICAL AND CONTEMPORARY CR

4、YPTOLOGY,清華大學出版社,2005-72.William Stallings: Cryptography and Network Security: Principles and Practice. 2nd ed. Prentice Hall, 1998.3.楊波著:現(xiàn)代密碼學,清華大學出版社,2003-8.4.Wenbo Mao. Modern Cryptography: Theory and Practicce. 電子工業(yè)出版社,2004-7.5許主洪著:加密與解密-密碼技術剖析與實戰(zhàn)應用,人民郵電出版社,2002-8.6張煥國,劉玉珍著:密碼學引論,武漢大學出版社,2003.7段

5、鋼著:加密與解密,電子工業(yè)出版社,2005-3.五、實驗內容與報告的要求實驗1、2的內容要求(提示性的)與封面見附錄一(打印時將“附錄一”3個字去掉)。實驗3的內容要求(提示性的)與封面見附錄二(打印時將“附錄二”3個字去掉)。嚴禁互相抄襲!一經發(fā)現(xiàn)抄襲者與被抄襲者全無成績!五、時間與場地第7、9周,周一9-12節(jié);綜合樓311,軟信1201-03班(附錄一)現(xiàn)代密碼學與加解密技術實驗報告 實驗名稱Vigenere和Column permutation cipher的編程實現(xiàn)班 級信息安全一班學 號20124961姓 名鄭魏獻日 期2014-5-3成 績評 閱 人軟件學院一、 實驗目的與意義

6、通過編程實現(xiàn)Vigenere和Column permutation cipher密碼算法,加深了我們對古典密碼學的了解,這也為我們深入學習密碼學奠定了堅實的基礎。二、 實驗環(huán)境操作系統(tǒng):Windows XP上級地點:綜合樓311編程軟件:VC+ 6.0三、 實驗的預習內容密碼學基礎vigenere算法、Column permutation cipher算法相關知識。Vigenere算法請輸入秘鑰K1創(chuàng)建加密矩陣 D=1 D=3輸入選項編號D D=2請輸入要解密的字符串退出請輸入要加密的字符串解密加密結束開始開始輸入密文將明文按長度D分從F中找到密文對應位置的數(shù)選取置換數(shù)字F根據位置置換密文的明

7、文加密解密結束結束四、 實驗的步驟與調試方法 Vigenere:加密:實驗步驟:1獲得秘鑰2創(chuàng)建加密矩陣3獲得明文4加密5得到密文 解密:實驗步驟:1獲得秘鑰2創(chuàng)建加密矩陣3獲得密文4解密5獲得明文 Column permutation:加密:實驗步驟:1獲得明文2將明文按長度D分3加密4獲得密文 解密:實驗步驟:1輸入密文2從F中找到密文對應位置的數(shù)3根據位置置換密文的明文4解密5獲得明文五、 實驗數(shù)據與實驗結果 Vigenere:1 明文:woshidongbeidaxuexuesheng 關鍵字:line 密文:hwfltlbroikypfhidprrr 2 密文:scehvvvantc

8、iarrj 關鍵字:woman 明文:woshizhongguoren Column permutation:1 明文:woshizhongguoren關鍵字:line密文:sygeozgrhounwino2密文:woshidongbeidaxuexuesheng關鍵字:line明文:uowdenoasgsxhbhueeisnidx六、 實驗用程序清單(要有注釋)vigenere/*初始化vigenere方陣*/for(i=1;i<27;i+)for(j=1;j<27;j+)squareij=63+i+j;if(squareij>90)squareij=squareij-26

9、;for(k=1;k<27;k+)for(m=1;m<27;m+)printf("%c ",squarekm);printf("n");/*加密算法*/char * vigenere(char key,char word) char *text=(char *)malloc(MAX*sizeof(char); int key_length=strlen(key); int word_length=strlen(word); int i,j,c; for(i=0;i<word_length;i+)if(wordi>=65&&

10、amp;wordi<=90)|(wordi>=97&&wordi<=122)if(wordi>=97&&wordi<=122)c=wordi-96;else c=wordi-64;j=i%key_length;texti=squarekeyj-96c;else texti=wordi;texti='0'return text;/*解密算法*/char * anti_vigenere(char key,char * en_word)char *word=(char *)malloc(MAX*sizeof(char);

11、int key_length=strlen(key); int word_length=strlen(en_word); int i,j,c,k,d; for(i=0;i<word_length;i+) if(en_wordi>=65&&en_wordi<=90) c=i%key_length;/*所用密鑰在所在*/ k=keyc-96; d=en_wordi-squarek1; if(d>=0) wordi='a'+d; else wordi='z'+d+1; else wordi=en_wordi; wordi=

12、9;0' return word;Column permutetion 加密void Encryption(char str1,char key) int i,j; char num300; int plen=strlen(str1); int len=strlen(key); for(i=0;i<len;i+) numi=1; for(j=0;j<len;j+) if(keyj<keyi) numi+; for(j=0;j<i;j+) if(keyj = keyi) numi=numi+1; printf("n"); for(i=0;i&l

13、t;len;i+) for(j=0;j<plen/len;j+) printf("%c",str1j*len+numi-1); printf(" "); printf("n"); 解密void Decryption(char key,char str3) int i,j; char num500; char cnum500; int clen=strlen(str3); int len=strlen(key); for(i=0;i<len;i+) numi=1; for(j=0;j<len;j+) if(keyj&l

14、t;keyi) numi+; for(j=0;j<i;j+) if(keyj = keyi) numi=numi+1; for(i=0;i<len;i+) for(j=0;j<len;j+) if(i+1=numj) cnumi=j; for(i=0;i<clen/len;i+) for(j=0;j<len;j+) printf("%c",str3cnumj*clen/len+i); printf(" "); printf("n");七、 思考題(必需回答)寫明如下問題1. Vigenere密碼的原理是什

15、么? Vigenere加密法是基于關鍵詞的加密系統(tǒng),但不是像單碼關鍵詞加密法那樣使用關鍵詞來定義替換模式的,關鍵詞寫在明文的上面,并不斷重復書寫,這樣每個明文字母都與一個關鍵詞的字母關聯(lián)。例如,如果關鍵詞為"hold",而明文為"this is the plaintext",那么,關鍵詞明文的關聯(lián)如下所示:h o l d h o l d h o l d h o l d h ot h i s i s t h e p l a i n t e x t每個明文字母與關鍵詞的一個字母對應。例如,第一個明文字母"t"與關鍵詞的字母"h&

16、quot;配對。利用如下圖所示的Vigenere表,在密鑰字母確定的行和明文字母確定的列交叉處的字母即為用來替代明文字母的密文字母。例如上面例子中第一對是"h-t",在下表中查找"h"行和"t"列的交叉處,即為密文字母"a"。重復以上過程可以生成以下的密文:密鑰 h o l d h o l d h o l d h o l d h o明文 t h i s i s t h e p l a i n t e x t密文 a v t v p g e k l d w d p b e h d h2. Vigenere密碼的主要缺

17、陷有哪些? 不能經受住頻率分析的攻擊方法3. 對Vigenere密碼的分析方法有哪幾種? Vigenere密碼是一個基于單表置換的分塊對稱加密算法。將明文T分為長度為n的若干塊(若最后一塊不足則用隨機數(shù)補滿),密鑰K長度為n。在加密時對每個明文分塊Ti做Ci=(Ti+Ki)%m,解密時對每個密文分塊Ci做Ti=(Ci-Ki)%m,其中m為字符空間大小。 顯然,該加密算法是一個不安全的加密算法。Vigenere算法有著致命的缺陷Ki=(Ci-Ti)%m,使得他可以被已知明文攻擊完全破解。同時,利用Friedman攻擊也能夠完全破解該算法,只是破解難度稍大。但是,我們也可以看到,這兩種破解都有著一

18、個共同的假設:密鑰長度n小于明文的長度,即相同的明文字符可能多次被相同的密鑰字符加密,生成相同的密文字符。 4. 對Vigenere密碼的改進方法是什么? 使用長度分別為m和n的兩個密鑰來進行兩輪加密,等效于使用密鑰長度為m和n的最小公倍數(shù)的一個密鑰進行一輪的加密(證明略)。這樣,如果m、n互質,我們實際上就做到了使用長度為m+n的密鑰來代替長度為m*n的密鑰,從而大大的降低了密鑰的長度5. Column permutation cipher 的原理是什么? 列置換的加密原理是,明文按行填寫在一個矩陣中,而密文則是以預訂的順序按列讀取生成的。如果矩陣是4行5列,那么短語“ENCRYPTION

19、ALGORITHMS” 可以如下寫入該矩陣中,按一定的順序讀取生成密文6. 給定關鍵字為“experiment”,加密矩陣將包括幾列,以及列置換的次序是什么?7. 簡述對Column permutation cipher的分析方法。 a.確定列的可能大??;b.確定正確的矩形; C.還原列的順序8. Column permutation cipher的安全性增強方法是什么? 進行雙重換位加密,先用列換位法將明文加密,然后再次利用列換位法將第一次換位加密的密文加密。這兩次換位所使用的關鍵詞可以相同。經過兩次換位后,明文字母的位置完全被打亂了。八、 結束語通過本次實驗的學習,讓我對古典密碼又有了一個

20、深層次的認識和學習,而且我的編程能力又有了一個比較大的提升,重新鞏固了C語言知識;但是我還發(fā)現(xiàn)自己還有許多地方做得不足,有些密碼學的知識還是掌握的不夠好,不時還得翻書看看,九、 參考文獻1.Richard J.Spillman:CLASSICAL AND CONTEMPORARY CRYPTOLOGY,清華大學出版社,2005-72.William Stallings: Cryptography and Network Security: Principles and Practice. 2nd ed. Prentice Hall, 1998.3.楊波著:現(xiàn)代密碼學,清華大學出版社,2003-

21、8. 4.Wenbo Mao. Modern Cryptography: Theory and Practicce. 電子工業(yè)出版社,2004-7. 5許主洪著:加密與解密-密碼技術剖析與實戰(zhàn)應用,人民郵電出版社,2002-8. 6張煥國,劉玉珍著:密碼學引論,武漢大學出版社,2003. 7段鋼著:加密與解密,電子工業(yè)出版社,2005-3.實驗成績考查內容分數(shù)得分做好實驗內容的預習,寫出預習報告10了解實驗題目的調試方法10按實驗要求預先設計好程序10認真記錄實驗數(shù)據并分析實驗結果10實驗后按要求書寫實驗報告,記錄實驗用數(shù)據及運行結果30創(chuàng)新能力強,在實驗中設計的程序有一定的通用性,算法優(yōu)化2

22、0實驗過程中,具有嚴謹?shù)膶W習態(tài)度,認真、踏實、一絲不茍的科學作風10(附錄二)現(xiàn)代密碼學與加解密技術實驗報告 實驗名稱DES的編程實現(xiàn)班 級信息安全1201班學 號20124961姓 名鄭魏獻日 期2014-5-3成 績評 閱 人軟件學院一、 實驗目的與意義加深我們對DES算法的認識,鞏固C語言知識,加強我們的編程能力,為我們日后更加深入的學習密碼學打下堅實的基礎。二、 實驗環(huán)境 操作系統(tǒng):WINDOWS XP 上機地點:綜合樓311 編程軟件:VC+ 6.0三、 實驗的預習內容 密碼學DES算法及c語言相關知識Plaintext(64bit)程序框圖:Key(64bit)Initial Tr

23、anspositionDiscarding(56bit)16 StagesPermutingFinal TransportionCiphertext(64bit)四、 實驗的步驟與調試方法 1. 輸入64個二進制位明碼文數(shù)據保存為8*8的二維數(shù)組 2. 分成左右兩個大小相等的部分,每部分為一個32位二進制的數(shù)據塊 3. 首先按照一定規(guī)則對密鑰進行壓縮置換,得到48位子密鑰 4. S盒置換 5 . P盒置換 6. 用替代法和換位法和換位法對上一次迭代的輸出進行加密變換 7. 置換得到最終密文五、 實驗數(shù)據與實驗結果明文:lkjhgfds秘鑰12345678密文:A4C7EB3E5937430A六

24、、 實驗用程序清單(要有注釋) 把DatIn開始的長度位Len位的二進制 復制到DatOut后void BitsCopy(bool *DatOut,bool *DatIn,int Len) / 數(shù)組復制 OK int i=0;for(i=0;i<Len;i+)DatOuti=DatIni;字節(jié)轉換成位函數(shù) 每8次換一個字節(jié) 每次向右移一位 和1與取最后一位 共64位 void ByteToBit(bool *DatOut,char *DatIn,int Num) / OKint i=0;for(i=0;i<Num;i+)DatOuti=(DatIni/8>>(i%8)&

25、amp;0x01; 位轉換成字節(jié)函數(shù) 字節(jié)數(shù)組每8次移一位 位每次向左移 與上一次或 -*/void BitToByte(char *DatOut,bool *DatIn,int Num) / OKint i=0;for(i=0;i<(Num/8);i+)DatOuti=0; for(i=0;i<Num;i+)DatOuti/8|=DatIni<<(i%8);/*- 二進制密文轉換為十六進制 需要16個字符表示-*/void BitToHex(char *DatOut,bool *DatIn,int Num)int i=0;for(i=0;i<Num/4;i+)D

26、atOuti=0;for(i=0;i<Num/4;i+)DatOuti = DatIni*4+(DatIni*4+1<<1)+(DatIni*4+2<<2)+(DatIni*4+3<<3);if(DatOuti%16)>9)DatOuti=DatOuti%16+'7' / 余數(shù)大于9時處理 10-15 to A-F / 輸出字符 elseDatOuti=DatOuti%16+'0' / 輸出字符 /*- 十六進制字符轉二進制-*/void HexToBit(bool *DatOut,char *DatIn,int

27、Num)int i=0; / 字符型輸入 for(i=0;i<Num;i+)if(DatIni/4)>'9') / 大于9 DatOuti=(DatIni/4-'7')>>(i%4)&0x01; elseDatOuti=(DatIni/4-'0')>>(i%4)&0x01; / 表置換函數(shù) OKvoid TablePermute(bool *DatOut,bool *DatIn,const char *Table,int Num) int i=0;static bool Temp256=0;fo

28、r(i=0;i<Num;i+) / Num為置換的長度 Tempi=DatInTablei-1; / 原來的數(shù)據按對應的表上的位置排列 BitsCopy(DatOut,Temp,Num); / 把緩存Temp的值輸出 / 子密鑰的移位void LoopMove(bool *DatIn,int Len,int Num) / 循環(huán)左移 Len數(shù)據長度 Num移動位數(shù)static bool Temp256=0; / 緩存 OKBitsCopy(Temp,DatIn,Num); / 將數(shù)據最左邊的Num位(被移出去的)存入Temp BitsCopy(DatIn,DatIn+Num,Len-Num

29、); / 將數(shù)據左邊開始的第Num移入原來的空間BitsCopy(DatIn+Len-Num,Temp,Num); / 將緩存中移出去的數(shù)據加到最右邊 / 按位異或void Xor(bool *DatA,bool *DatB,int Num) / 異或函數(shù)int i=0;for(i=0;i<Num;i+)DatAi=DatAiDatBi; / 異或 / 輸入48位 輸出32位 與Ri異或void S_Change(bool DatOut32,bool DatIn48) / S盒變換int i,X,Y; / i為8個S盒 for(i=0,Y=0,X=0;i<8;i+,DatIn+=6

30、,DatOut+=4) / 每執(zhí)行一次,輸入數(shù)據偏移6位 / 每執(zhí)行一次,輸出數(shù)據偏移4位Y=(DatIn0<<1)+DatIn5; / af代表第幾行X=(DatIn1<<3)+(DatIn2<<2)+(DatIn3<<1)+DatIn4; / bcde代表第幾列ByteToBit(DatOut,&S_BoxiYX,4); / 把找到的點數(shù)據換為二進制七、 思考題(必需回答)1. DEDS 的原理是什么? DES使用一個56位的密鑰以及附加的8位奇偶校驗位,產生最大64位的分組大小。這是一個迭代的分組密碼,使用稱為Feistel的技術,

31、其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環(huán)功能,然后將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續(xù)下去,但最后一個循環(huán)不交換。DES使用16個循環(huán)。2. DES使用多少位密鑰? 8bit3. DES對明文分塊的單位是多少? 8bit4. DES對每一個數(shù)據塊加密的輪次是多少? 16輪5. 簡單描述EBox的操作過程。 設 B(i)=b1(i)b2(i)b64(i)是第 i+1次迭代的 64個二進制位輸入區(qū)組,將 B(i)分為左右兩個大小相等的部分,每部分為一個32位二進制的數(shù)據塊L(i)=l1(i)l2(i)l32(i)= b1(i)b2(i)b32(i) R(i

32、)=r1(i)r2(i)r32(i)=b33(i)b34(i)b64(i)把 R(i)視為由8個4位二進制的塊組成r1(i)r2(i) r3(i)r4(i)r5(i)r6(i) r7(i)r8.r29(i)r30 (i)r31(i)r32(i)通過循環(huán)抄錄相鄰塊的相鄰塊,把它們再擴充為8個6位二進制的塊r32(i)r1(i) r2(i)r3(i) r4r5(i) r4(i)r5 (i)r6(i)r7 (i)r8(i)r9(i) r28(i)r29 (i)r30(i)r31(i) r32r1(i)用 E(R(i)表示這個變換,稱為擴充函數(shù)。擴充函數(shù)E32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 1312 13 14 15 16 1716 17 18 19 20 2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論