歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

現(xiàn)代密碼學(xué)-古典密碼 實驗報告材料

  • 資源ID:83448120       資源大?。?span id="5vyqg0l" class="font-tahoma">55.50KB        全文頁數(shù):17頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

現(xiàn)代密碼學(xué)-古典密碼 實驗報告材料

word現(xiàn)代密碼學(xué)實驗報告院系:理學(xué)院班級:信安二班:學(xué)號:前言密碼學(xué)Cryptology是研究秘密通信的原理和破譯秘密信息的方法的一門學(xué)科。密碼學(xué)的根本技術(shù)就是對數(shù)據(jù)進(jìn)展一組可逆的數(shù)學(xué)變換,使未授權(quán)者不能理解它的真實含義。密碼學(xué)包括密碼編碼學(xué)Cryptography和密碼分析學(xué)Cryptanalyst兩個既對立又統(tǒng)一的主要分支學(xué)科。研究密碼變化的規(guī)律并用之于編制密碼以保護(hù)信息安全的科學(xué),稱為密碼編碼學(xué)。研究密碼變化的規(guī)律并用之于密碼以獲取信息情報的科學(xué),稱為密碼分析學(xué),也叫密碼破譯學(xué)。密碼學(xué)在信息安全中占有非常重要的地位,能夠為信息安全提供關(guān)鍵理論與技術(shù)。密碼學(xué)是一門古老而深奧的學(xué)問,按其開展進(jìn)程,經(jīng)歷了古典密碼和現(xiàn)代密碼學(xué)兩個階段。現(xiàn)代密碼學(xué)Modern Cryptology通常被歸類為理論數(shù)學(xué)的一個分支學(xué)科,主要以可靠的數(shù)學(xué)方法和理論為根底,為保證信息的性、完整性、可認(rèn)證性、可控性、不可抵賴性等提供關(guān)鍵理論與技術(shù)。古典密碼算法實驗在密碼編碼體制中有兩種 根本也是 古老的編碼體制一直沿用至今,它們是代替密碼和置換密碼,其歷史悠久并且是現(xiàn)代密碼體制的根本組成局部,在密碼學(xué)中占有重要地位。古典密碼是密碼學(xué)開展的一個階段,也是近代密碼學(xué)產(chǎn)生的淵源,一般把 Shannon 在 1949 年發(fā)表“系統(tǒng)的通信理論之前的時期稱為古典密碼時期。盡管古典密碼大多比擬簡單,一般可用手工或機(jī)械方式實現(xiàn),且都可用統(tǒng)計分析方法破譯,目前已很少采用。但是,古典密碼所采用的代替技術(shù)和置換技術(shù)仍然是現(xiàn)代分組密碼算法設(shè)計的根底,了解它們的設(shè)計原理,有助于理解、設(shè)計和分析現(xiàn)代密碼。一、 實驗?zāi)康?通過編程實現(xiàn)經(jīng)典的代替密碼算法和置換密碼,包括移位密碼、維吉尼亞密碼、周期置換密碼、列置換密碼,加深對代替技術(shù)的了解,為現(xiàn)代分組密碼實驗奠定根底。二、 實驗原理 代替Substitution是古典密碼中 根本的處理技巧,就是將明文字母由其他字母表中的字母替換的一種方法。代替密碼Substitution Cipher就是使用代替法進(jìn)展加解密的密碼算法。代替密碼的密鑰是一個替換表,它表示了明文字母與密文字母的對應(yīng)關(guān)系。加密時,通過查表,明文字母被逐個替換后,生成看似無任何意義的字母串,即密文。解密時,逆向使用替換表,將密文字母逐個替換為明文字母。按照一個明文字母是否總是被一個固定的字母代替進(jìn)展劃分,代替密碼可分為兩類:(1) 單表代替密碼Monoalphabetic Substitution Cipher:明文中出現(xiàn)的同一個字母,不管它出現(xiàn)在什么位置,在加密時都用一樣的字母來代替。移位密碼就是單表代替密碼。(2) 多表代替密碼Polyalphabetic Substitution Cipher:明文中出現(xiàn)的同一個字母,在加密時不是完全被一樣的字母代替,而會根據(jù)其出現(xiàn)的位置次序用不同的字母代替。維吉利亞密碼就是多表代替密碼。1移位密碼移位密碼Shift Cipher是一種典型的單表替代密碼,也稱為加法密碼。移位密碼的加密方法就是將明文中的每個字母用其在字母表后面的第 k 個字母替代,它的加密過程可以表示為:c = (m + k) mod n其中,m 為明文字母在字母表中的位置數(shù);n 為字母表中的字母總數(shù);k 為密鑰;c 為密文字母在字母表中對應(yīng)的位置數(shù)。相應(yīng)的,移位密碼的解密過程可以表示為:m = (c - k) mod n實驗代碼:#include<iostream>#include<math.h>using namespace std;/定義一些全局變量char str100; /用于存儲處理前字符串char enstr100; /用于存儲處理后字符串int num=0; /用于累計字符數(shù)量char * p; /用于指向處理字符串int key;/加密void encrypt()while(*p!='0') *p=(*p-97+key)%26+97;p+;cout<<CRYPT_OK<<endl;cout<<"加密后字符:"<<str<<endl<<endl;/解密void decrypt()while(*p!='0')*p=(*p-71-key)%26+97;p+;Cout<<CRYPT_OK<<endl;cout<<"解密后字符:"<<str<<endl<<endl;void main()int ord;while(1)cout<<"1.加密n2.解密n3.退出"<<endl;p=str;cout<<"請選擇功能:"cin>>ord;if(ord=1)cout<<"請輸入待處理字符串:"<<endl; cin>>str;p=str; cout<<"請輸入密鑰:" cin>>key;encrypt();if(ord=2) cout<<"請輸入待處理字符串:"<<endl; cin>>str;p=str; cout<<"請輸入密鑰:" cin>>key;decrypt();if(ord=3) break;實驗結(jié)果:2維吉尼亞密碼維吉尼亞密碼Vigenere Cipher是一種多表代替密碼,其本質(zhì)是周期移位密碼。維吉尼亞密碼的用戶密鑰為一含有 d 個字母的有限字母序列k = k0k1kd-1加密時,首先將用戶密鑰進(jìn)展周期擴(kuò)展周期為 d,擴(kuò)展后的無限字母序列稱為工作密鑰,記為K = K0K1Ki其中Ki = Ki mod d,i=0,1,當(dāng) d=1 時,維吉尼亞密碼就是移位密碼。對于含有 l 個字母的明文,維吉尼亞加密過程可以表示為:ci = (miKi ) mod n其中,M = m0m1miml-1 為明文,C= c0c1cicl-1 為密文,K = K0K1KiKl-1 為工作鑰, n 為明文字母表的長度,l 為明文長度含有字母的數(shù)目。例如,使用用戶鑰 cat,對明文“vigenere cipher 進(jìn)展維吉尼亞加密。此時,n=26對應(yīng)英文字母表,用戶鑰 c=3、a=0、t=19,得到的密文為“xizgnxtevkpagr。實驗代碼:#include<iostream>using namespace std;int main()while(1)char choice;cout<<endl<<"-維吉尼亞加密解密-"<<endl;cout<<"輸入1進(jìn)展加密,輸入2進(jìn)展解密,輸入3退出"<<endl;cin>>choice;if(choice='1')char arra100="",arrb100="",arrc100=""int i=0;char a,b,c;cout<<"請輸入明文:"cin>>arrb;cout<<"請輸入密鑰:"cin>>arra;int an=strlen(arra);int bn=strlen(arrb);if(an<bn)for(i=an;i<bn;i+)arrai=arrai%an;for(i=0;i<bn;i+)a=arrai;b=arrbi;c=a+b-97;if(c>90)c=char(64+c%90);arrci=c;elsearrci=char(c);cout<<"加密后密文為:"for(i=0;i<strlen(arrc);i+)cout<<arrci;else if(choice='2')char arra100="",arrb100="",arrc100=""int i=0;char a,b,c;cout<<"請輸入密文:"cin>>arrc;cout<<"請輸入密鑰:"cin>>arra;/cout<<sizeof(arra)<<endl;/cout<<strlen(arra);int an=strlen(arra);int=strlen(arrc);if(an<)for(i=an;i<i+)arrai=arrai%an;for(i=0;i<i+)c=arrci;a=arrai;b=c-a+97;if(b<97) b=b+26; arrbi=char(b);else arrbi=char(b);cout<<"解密后明文為:"for(i=0;i<strlen(arrb);i+)cout<<arrbi;else if(choice='3')return 0;elsecout<<endl<<"error,輸入不符!"<<endl;實驗結(jié)果:3列置換密碼列置換密碼也稱為矩陣置換密碼。其加解密方法如下:把明文字符以固定的寬度 m(分組長度)水平地(按行)寫在一紙上,按 1,2,m 的一個置換交換列的位置次序,再按垂直方向(即按列)讀出即得密文。解密就是將密文按一樣的寬度 m 垂直在寫在紙上,按置換的逆置換1 交換列的位置次序,然后水平地讀出得到明文。置換就是密鑰。實驗代碼:主函數(shù)main();#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>int main(int argc)char *str1,*key,*str3,c; str1=(char *)malloc(500); key=(char *)malloc(500);str3=(char *)malloc(500);printf("Column permutation cipher Encryption & Decryptionn-n Please select which type n E:Encriptionn D:Decriptionn Q:Quitn-n"); c=getchar();while(c!='q'&&c!='Q')if(c='E'|c='e')getchar(); printf("Please input the plaintext:n"); gets(str1); printf("Please input the Encrption Key:n"); gets(key);printf("The cipher is:n"); Encryption(str1,key);printf("Column permutation cipher Encryption & Decryptionn-n Please select which type n E:Encriptionn D:Decriptionn Q:Quitn-n");c=getchar();else getchar();printf("Please input the Decryption Key:n");gets(key);printf("Please input the ciphertext:n"); gets(str3); printf("The plaintext is:n"); Decryption(key,str3);printf("Column permutation cipher Encryption & Decryptionn-n Please select which type n E:Encriptionn D:Decriptionn Q:Quitn-n");c=getchar();free(str1);free(key);free(str3);return 0;加密函數(shù):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<len;i+) for(j=0;j<plen/len;j+) printf("%c",str1j*len+numi-1); printf(" "); printf("n");解密函數(shù):void Decryption(char key,char str3)int i,j;char num500;charum500;int clen=strlen(str3);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; for(i=0;i<len;i+) for(j=0;j<len;j+) if(i+1=numj) umi=j; for(i=0;i<clen/len;i+) for(j=0;j<len;j+) printf("%c",str3umj*clen/len+i); printf(" "); printf("n");實驗結(jié)果:17 / 17

注意事項

本文(現(xiàn)代密碼學(xué)-古典密碼 實驗報告材料)為本站會員(無***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!