古典密碼實(shí)驗(yàn)報(bào)告_第1頁(yè)
古典密碼實(shí)驗(yàn)報(bào)告_第2頁(yè)
古典密碼實(shí)驗(yàn)報(bào)告_第3頁(yè)
古典密碼實(shí)驗(yàn)報(bào)告_第4頁(yè)
古典密碼實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

古典密碼實(shí)驗(yàn)報(bào)告古典密碼實(shí)驗(yàn)報(bào)告古典密碼實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)室名稱(chēng):SimpleSPC信息安全云實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)項(xiàng)目名稱(chēng):古典密碼——置換密碼實(shí)驗(yàn)學(xué)時(shí):1學(xué)時(shí)實(shí)驗(yàn)原理:1)算法原理a)置換密碼算法就是不改變明文字符,而就是按照某一規(guī)則重新排列消息中的比特或字符順序,才而實(shí)現(xiàn)明文信息的加密。將明文中的字母按照給定的順序安排在一個(gè)矩陣中,然后用根據(jù)密鑰提供的順序重新組合矩陣中的字母,從而形成密文。其解密過(guò)程就是根據(jù)密鑰的字母數(shù)作為列數(shù),將密文按照列、行的順序?qū)懗?再根據(jù)密鑰給出的矩陣置換產(chǎn)生新的矩陣,從而恢復(fù)明文。b)置換密碼(PermutationCipher),又稱(chēng)換位密碼。算法實(shí)施時(shí),明文的字母保持相同,但順序會(huì)被打亂。置換只不過(guò)就是一個(gè)簡(jiǎn)單的換位,每個(gè)置換都可以用一個(gè)置換矩陣Ek來(lái)表示。每個(gè)置換都有一個(gè)與之對(duì)應(yīng)的逆置換Dk。置換密碼的特點(diǎn)就是僅有一個(gè)發(fā)送方與接受方知道的加密置換(用于加密)及對(duì)應(yīng)的逆置換(用于解密)。它就是對(duì)明文L長(zhǎng)字母組中的字母位置進(jìn)行重新排列,而每個(gè)字母本身并不改變。c)設(shè)n為一固定整數(shù),P、C與K分別為明文空間、密文空間與密鑰空間。明/密文就是長(zhǎng)度為n的字符序列,分別記為X(x1,x2,…,xn)屬于P與Y(y1,y2,…,yn)屬于C,K就是定義在{1,2,…,n}的所有置換組成的集合。對(duì)任何一個(gè)密鑰(即一個(gè)置換),定義置換如下:

加密置換為:

解密置換為:

上式中,就是的逆置換,密鑰空間K的大小為n!2)算法參數(shù)

置換密碼算法主要有c、m、k、n四個(gè)參數(shù)。c為密文,m就是明文,k為密鑰,n為模數(shù)。3)算法流程

算法流程。如圖所示實(shí)驗(yàn)?zāi)康?學(xué)習(xí)置換密碼的原理2)學(xué)習(xí)置換密碼的算法實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:1、在虛擬機(jī)上運(yùn)行置換密碼、exe可執(zhí)行文件,根據(jù)提示輸入明文與密鑰,同時(shí)檢查輸出的解密后的結(jié)果就是否與明文一致。2、學(xué)習(xí)掌握置換密碼的原理,并根據(jù)明文與密鑰計(jì)算出對(duì)應(yīng)的加密文,并與程序輸出的結(jié)果進(jìn)行比對(duì),掌握其加密解密的過(guò)程。3、瞧懂實(shí)驗(yàn)程序代碼,如有需要可在其上進(jìn)行優(yōu)化。實(shí)驗(yàn)器材(設(shè)備、虛擬機(jī)名稱(chēng)):Windows7工具:C:\tools\密碼學(xué)課程\01密碼學(xué)算法\02古典密碼\01置換密碼實(shí)驗(yàn)步驟:1、查瞧置換密碼算法運(yùn)行結(jié)果并學(xué)習(xí)其核心算法1、1

點(diǎn)擊【置換密碼、exe】,選擇對(duì)明文【asdfgh】使用密鑰【qwerty】進(jìn)行加密,程序運(yùn)行結(jié)果。如下圖所示

但就是在實(shí)驗(yàn)中發(fā)現(xiàn),當(dāng)密鑰中包含相同字符時(shí),加密與解密結(jié)果會(huì)出現(xiàn)問(wèn)題,如下圖所示:在觀察程序代碼后,發(fā)現(xiàn)應(yīng)該就是加密表生成出現(xiàn)問(wèn)題,因此在實(shí)驗(yàn)中我重新修改了程序中計(jì)算加密表部分的代碼,利用雙層循環(huán),對(duì)于每一個(gè)字符,計(jì)算比其小的字符或者與它一樣但就是出現(xiàn)在其左側(cè)的字符個(gè)數(shù),得到的序列便就是加密表的內(nèi)容,將程序按照上述思路修改后測(cè)試運(yùn)行正確。1、2

更新后的置換密碼的核心算法如下所示。#include<iostream>#include<algorithm>usingnamespacestd;chara[20][6],b[20][6],c[20][6],m[102],key[6],ky[6],mw[102],bb[102];intzh[6],zh1[6];intj,len,length,e,f;voidISD_zhihuan_zhihuan(intle){ inti,s=0; if(le%6==0) //明文長(zhǎng)度就是6的倍數(shù)時(shí) { for(j=0;j<(le/6);j++) for(i=0;i<6;i++,s++) { a[j][i]=m[s]; } } else //明文長(zhǎng)度不就是6的倍數(shù)時(shí) { for(j=0;j<((le-le%6)/6);j++) for(i=0;i<6;i++,s++) { a[j][i]=m[s]; } j++; intw=0; for(intl=le-le%6;l<le;l++,w++) { a[j][w]=m[l]; } for(intll=le%6;ll<6;ll++) { a[j][ll]='X'; //數(shù)組后補(bǔ)x使數(shù)組長(zhǎng)度為6的倍數(shù) } } length=6*j;}intISD_zhihuan_encrypt(){ cout<<endl<<"請(qǐng)輸入密鑰,要求就是6位字母:"; cin>>key; for(intp=0;p<6;p++) { ky[p]=key[p]; } //生成置換表 for(inti=0;i<6;i++){ zh[i]=1; for(intj=0;j<6;j++){ if(key[j]<key[i]||(j<i&&key[j]==key[i])){ zh[i]++; } } } cout<<endl<<"加密后的結(jié)果為:"; intq=0; for(intg=0;g<=j;g++) for(inth=0;h<6;h++,q++) { b[g][h]=a[g][zh[h]-1]; //明文進(jìn)行置換 bb[q]=b[g][h]; cout<<bb[q]; } return0;} intISD_zhihuan_decrypt() { intss[6]={1,2,3,4,5,6}; for(intw=0;w<6;w++) { for(intp=0;p<6;p++) { if(ss[w]==zh[p]) zh1[w]=p+1; //計(jì)算逆置換表 } } cout<<endl<<"解密后的結(jié)果為:"; int t=0; for(intg=0;g<=j;g++) for(inth=0;h<6;h++,t++) { c[g][h]=b[g][zh1[h]-1]; //明文進(jìn)行逆置換 mw[t]=c[g][h]; } return0; } void main() { cout<<endl; cout<<"請(qǐng)輸入明文:"; intk=0; cin>>m; while(m[k]!='\0') //計(jì)算明文長(zhǎng)度 k++; len=k; cout<<"明文長(zhǎng)度len="<<len<<endl; ISD_zhihuan_zhihuan(len); ISD_zhihuan_encrypt(); ISD_zhihuan_decrypt(); for(intd=0;d<len+6;d++) cout<<mw[d]; //輸出解密后的明文 inty,yy; for(yy=0;yy<len;yy++) { if(mw[yy]==m[yy]) y=1; else y=0; } if(y=1) cout<<endl<<"CRYPT_OK"<<endl; if(y=0) cout<<endl<<"CRYPT_ERROR"<<endl; }實(shí)驗(yàn)結(jié)果及分析:測(cè)試修改后的程序,結(jié)果正確,如下圖所示:下面對(duì)結(jié)果進(jìn)行分析:對(duì)于輸入的密鑰miaooh計(jì)算每個(gè)字符的加密置換表值為431562因此可獲得加密結(jié)果為evlyao驗(yàn)證輸出結(jié)果正確計(jì)算每個(gè)字符的解密置換表值為362145因此可獲得解密結(jié)果為loveya實(shí)驗(yàn)結(jié)論:置換密碼作為傳統(tǒng)古典密碼的一種,思想比較簡(jiǎn)單,即將明文按照密鑰的長(zhǎng)度一行一行地寫(xiě)成一個(gè)矩陣,然后每一行按密鑰的順序?qū)⒚魑淖x出獲得的即為加密文。但就是由于置換密碼只就是將明文簡(jiǎn)單地作順序改變,字符并沒(méi)有變化,因此破譯起來(lái)比較容易,安全性較低。總結(jié)及心得體會(huì):作為第一個(gè)實(shí)驗(yàn),熟悉了實(shí)驗(yàn)的操作環(huán)境,并學(xué)會(huì)了置換密碼的原理,嘗試對(duì)明文進(jìn)行加密并將其解密。通過(guò)查瞧程序源碼對(duì)加密方法了解更加透徹,在將源碼進(jìn)行修改后解決了密鑰中包含相同字符結(jié)果出錯(cuò)的問(wèn)題,收獲很大,為以后其她加密算法的學(xué)習(xí)作準(zhǔn)備。實(shí)驗(yàn)報(bào)告學(xué)生姓名李昕宜學(xué)號(hào)2指導(dǎo)老師實(shí)驗(yàn)地點(diǎn)N3實(shí)驗(yàn)時(shí)間2018/3/19班級(jí)一班實(shí)驗(yàn)室名稱(chēng):SimpleSPC信息安全云實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)項(xiàng)目名稱(chēng):古典密碼——Vigenere密碼實(shí)驗(yàn)學(xué)時(shí):1學(xué)時(shí)實(shí)驗(yàn)原理:1)算法原理

a)Vigenere密碼就是由法國(guó)密碼學(xué)家BlaisedeVigenere于1858年提出的一種代換密碼,它就是多表代換密碼的典型代表。b)定義:設(shè)m為某一固定的正整數(shù),P、C與K分別為明文空間、密文空間與密鑰空間,并且P=K=C=(Z26)m,對(duì)一個(gè)密鑰k=(k1,k2,…,km),定義維吉尼亞密碼的加解密算法如下:

Vigenere密碼加密算法:ek(x1,x2,…,xm)=(x1+k1,x2+k2,…,xm+km)

Vigenere密碼解密算法:dk(y1,y2,…,ym)=(y1-k1,y2-k2,…,ym-km)。

其中k=(k1,k2,…,km)就是一個(gè)長(zhǎng)為m的密鑰字,密鑰空間的大小為26m,所以對(duì)一個(gè)相對(duì)小的m,窮舉密鑰也需要很長(zhǎng)的時(shí)間。如m=7,則密鑰空間大小超過(guò)8×109,所以手工搜索非常困難。當(dāng)明文的長(zhǎng)度超過(guò)m時(shí),可將明文串按長(zhǎng)度m分局,然后對(duì)每一組使用密鑰k加密。

2)算法參數(shù)

Vigenere密碼算法主要有c、m、k三個(gè)個(gè)參數(shù)。c為密文,m就是明文,k為密鑰。3)算法流程

算法流程如下。如圖所示實(shí)驗(yàn)?zāi)康?1)學(xué)習(xí)維吉尼亞算法的原理2)學(xué)習(xí)維吉尼亞算法的實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:1、在虛擬機(jī)上運(yùn)行Vigenere、exe可執(zhí)行文件,根據(jù)提示輸入明文與密鑰,同時(shí)檢查輸出的解密后的結(jié)果就是否與明文一致。2、學(xué)習(xí)掌握維吉尼亞算法的原理,并根據(jù)明文與密鑰計(jì)算出對(duì)應(yīng)的加密文,并與程序輸出的結(jié)果進(jìn)行比對(duì),掌握其加密解密的過(guò)程。3、瞧懂實(shí)驗(yàn)程序代碼,如有需要可在其上進(jìn)行優(yōu)化。實(shí)驗(yàn)器材(設(shè)備、虛擬機(jī)名稱(chēng)):Windows7工具:C:\tools\密碼學(xué)課程\01密碼學(xué)算法\02古典密碼\03vigenere密碼算法實(shí)驗(yàn)步驟:一、查瞧維吉尼亞密碼算法運(yùn)行結(jié)果并學(xué)習(xí)其核心算法1、1

點(diǎn)擊文件【Vigenere、exe】,輸入指令【v】,輸入明文【xipuyangguang】,即可得到密鑰與密文與明文,如圖1所示圖11、2

維吉尼亞密碼的核心算法如下所示。根據(jù)實(shí)驗(yàn)中已給代碼進(jìn)行分析了解了維吉尼亞密碼的實(shí)現(xiàn)步驟,將主程序中沒(méi)有用到的生命變量去掉,加入一些交互語(yǔ)句得到如下代碼:#include<ctype、h>#include<stdio、h>#include<conio、h>#include<string、h>#include<iostream>usingnamespacestd;voidISD_Vigenere_crypt(charm[],chark[],charr[]){ inti,j,s=0; j=strlen(k); for(i=0;m[i];i++) m[i]=tolower(m[i]); for(i=0;k[i];i++) k[i]=tolower(k[i]); for(i=0;m[i];i++) if(isalpha(m[i])) { r[i]=(m[i]-'a'+k[s%j]-'a')%26+'a'; s++; /*s用來(lái)跳過(guò)明文中的空格字符*/ } else r[i]=m[i]; r[i]=0; /*密文字符串結(jié)束符*/}voidISD_Vigenere_decrypt(charc[],chark[],charm[]){ inti,j,s=0; j=strlen(k); for(i=0;c[i];i++) c[i]=tolower(c[i]); for(i=0;k[i];i++) k[i]=tolower(k[i]); for(i=0;c[i];i++) if(isalpha(c[i])) { m[i]=(c[i]-k[s%j]+26)%26+'a'; s++; } else m[i]=c[i]; m[i]=0;}voidmain(intargc,char*argv[]){ charm[1024]; printf("古典密碼算法演示程序"); charcommand; printf("\n"); cout<<"輸入v:維吉尼亞加密!\n"; cout<<"輸入h:獲得幫助!\n"; cout<<"輸入e:退出程序!\n"; cout<<"請(qǐng)輸入指令:";loop:cin>>command; switch (command) { case'v': { chark[]="best"; cout<<"\ninputplaintext:"; cin>>m; charc[80]; chard[80]; ISD_Vigenere_crypt(m,k,c); ISD_Vigenere_decrypt(c,k,d); cout<<"明文:"; puts(m); cout<<"密鑰:"; puts(k); cout<<"加密結(jié)果:"; puts(c); cout<<"解密結(jié)果:"; puts(d); gotoloop; } case'e': { return; } case'h': ; { cout<<"輸入v:維吉尼亞加密!\n"; cout<<"輸入h:獲得幫助!\n"; cout<<"輸入e:退出程序!\n"; gotoloop; } default: gotoloop; }}實(shí)驗(yàn)結(jié)果及分析:測(cè)試程序,結(jié)果正確,如下圖所示:明文nomorecountingdollars密鑰bestbestbestbestbestb加密osehsiuhvrlbokvhmpskt解密nomorecountingdollars驗(yàn)證結(jié)果與輸出一致,正確實(shí)驗(yàn)結(jié)論:維吉尼亞密碼加密方法就是根據(jù)密鑰內(nèi)容,對(duì)輸入的明文的字母進(jìn)行替換,在密鑰長(zhǎng)度大于1的情況下,通常來(lái)說(shuō)相同的字母也會(huì)由于對(duì)應(yīng)的密鑰字符不同而被不同的字符所替換,因此在一定程度上來(lái)說(shuō)保證了加密技術(shù)的安全性,但就是若已知密鑰的長(zhǎng)度且有足夠多樣本的情況下,同樣也可以做詞頻分析從而破譯密碼??偨Y(jié)及心得體會(huì):維吉尼亞密碼作為古典密碼中的一種,加密原理簡(jiǎn)單易懂,程序?qū)崿F(xiàn)也沒(méi)有太大的困難,并且在密鑰長(zhǎng)度較長(zhǎng)時(shí)加密安全性也可以有一定保證,較難破譯,但用頻率分析法可以破譯已知密鑰長(zhǎng)度的密文,因此對(duì)于現(xiàn)代技術(shù)來(lái)說(shuō)容易破譯,但通過(guò)學(xué)習(xí)維吉尼亞密碼學(xué)到了其加密的原理與基于統(tǒng)計(jì)破譯密碼的思想,收獲很大。實(shí)驗(yàn)報(bào)告學(xué)生姓名李昕宜學(xué)號(hào)2指導(dǎo)老師實(shí)驗(yàn)地點(diǎn)N3實(shí)驗(yàn)時(shí)間2018/3/20班級(jí)一班實(shí)驗(yàn)室名稱(chēng):SimpleSPC信息安全云實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)項(xiàng)目名稱(chēng):古典密碼——代換密碼實(shí)驗(yàn)學(xué)時(shí):1學(xué)時(shí)實(shí)驗(yàn)原理:1)單表代換密碼a)加法密碼

A與B就是有n個(gè)字母的字母表。

定義一個(gè)由A到B的映射:f:A→B

f(ai)=bi=aj

j=i+kmodn

加法密碼就是用明文字母在字母表中后面第k個(gè)字母來(lái)代替。

K=3時(shí)就是著名的凱撒密碼。

愷撒密碼——?dú)v史上第一個(gè)密碼技術(shù)

“愷撒密碼”就是古羅馬愷撒大帝在營(yíng)救西塞羅戰(zhàn)役時(shí)用來(lái)保護(hù)重要軍情的加密系統(tǒng)(《高盧戰(zhàn)記》)。b)乘法密碼

A與B就是有n個(gè)字母的字母表。?定義一個(gè)由A到B的映射:f:A→Bf(ai)=bi=ajj=ikmodn其中,(n,k)=1。注意:只有(n,k)=1,才能正確解密。c)密鑰詞組代替密碼

隨機(jī)選一個(gè)詞語(yǔ),去掉其中的重復(fù)字母,寫(xiě)到矩陣的第一行,從明文字母表中去掉這第一行的字母,其余字母順序?qū)懭刖仃?。然后按列取出字母?gòu)成密文字母表2)多表代換密碼

單表代替密碼的安全性不高,一個(gè)原因就是一個(gè)明文字母只由一個(gè)密文字母代替??梢岳妙l率分析來(lái)破譯。故產(chǎn)生了更為安全的多表代換密碼,即構(gòu)造多個(gè)密文字母表,在密鑰的控制下用以一系列代換表依次對(duì)明文消息的字母序列進(jìn)行代換。著名的多表代替密碼有Vigenere密碼等。a)Vernam密碼

明文、密文、密鑰都表示為二進(jìn)制位:

M=m1,m2,…,mnK=k1,k2,…,knC=c1,c2,…,cnb)Playfair密碼

用密鑰控制生成矩陣,然后每?jī)蓚€(gè)字母為單位進(jìn)行代換。c)Hill密碼(乘積密碼)

建立在矩陣相乘的基礎(chǔ)上,但不能抵抗已知明文攻擊。實(shí)驗(yàn)?zāi)康?學(xué)習(xí)代換密碼的原理2)學(xué)習(xí)代換密碼的算法實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:1、在虛擬機(jī)上運(yùn)行代換密碼、exe可執(zhí)行文件,根據(jù)提示輸入明文與密鑰,同時(shí)輸入之前得到的密文與密鑰檢查輸出的解密后的結(jié)果就是否與明文一致。2、學(xué)習(xí)掌握代換密碼的基本思想,了解其分類(lèi)與不同代換密碼之間的區(qū)別與共同點(diǎn),并根據(jù)明文與密鑰計(jì)算出對(duì)應(yīng)的加密文,并與程序輸出的結(jié)果進(jìn)行比對(duì),掌握其加密解密的過(guò)程。3、瞧懂實(shí)驗(yàn)程序代碼,如有需要可在其上進(jìn)行優(yōu)化。實(shí)驗(yàn)器材(設(shè)備、虛擬機(jī)名稱(chēng)):Window7工具:C:\tools\密碼學(xué)課程\01密碼學(xué)算法\02古典密碼\04代換密碼實(shí)驗(yàn)步驟:一、查瞧代換密碼算法運(yùn)行結(jié)果并學(xué)習(xí)核心算法1、1

運(yùn)行可執(zhí)行程序,結(jié)果如下(注意:這里輸入的字符串位數(shù)最多不超過(guò)5個(gè))。如圖1所示圖11、2源碼閱讀在實(shí)驗(yàn)中發(fā)現(xiàn)提供的源碼與代換密碼、exe文件無(wú)法對(duì)應(yīng),因此我根據(jù)可執(zhí)行文件進(jìn)行試驗(yàn)觀察發(fā)現(xiàn),程序就是將待加密明文中的每一個(gè)字符的ASCII碼與密鑰的值相加,加密結(jié)果就就是ASCII碼與對(duì)應(yīng)的字符,根據(jù)這個(gè)思路寫(xiě)的程序如下所示:#include<string>#include<iostream>usingnamespacestd;intmain(){ cout<<"請(qǐng)輸入待加密的明文:"<<endl; stringm; charc[10]=""; intk; cin>>m; cout<<"請(qǐng)輸入密鑰:"<<endl; cin>>k; inti=0; for(;i<m、length();i++){ c[i]=m[i]+k; } c[i]='\n'; cout<<"密文為:"<<endl<<c<<endl<<"請(qǐng)輸入待解密的密文:"<<endl; stringcom; cin>>com; cout<<"請(qǐng)輸入密鑰:"<<endl; cin>>k; cout<<"解密后的明文為:"<<endl; charming[10]=""; i=0; for(;i<com、length();i++){ ming[i]=c[i]-k; } ming[i]='\n'; cout<<ming<<endl; return0;}實(shí)驗(yàn)結(jié)果及分析:測(cè)試修改后的程序,結(jié)果正確,如下圖所示:‘d’+20=’x’‘b’+20=’v’‘c’+20=’w’‘a(chǎn)’+20=’u’實(shí)驗(yàn)結(jié)論:在本次實(shí)驗(yàn)中了解到代換密碼分為單表代換密碼與多表代換密碼,其中多表代換密碼中由于用多個(gè)代換表進(jìn)行加密,因此安全性要比單表代換密碼更強(qiáng)。代換密碼的思想就是要首先建立一個(gè)代換表(即密鑰),加密時(shí)需要將加密的明文依次通過(guò)查表,替換為相應(yīng)的字符,明文字符被逐個(gè)替換后生成密文,需要注意的就是將代換密碼與置換密碼進(jìn)行區(qū)分,置換密碼只就是更換明文中字符的順序,只就是進(jìn)行位置的置換。而之前學(xué)到的維吉尼亞密碼就是代換密碼的一種。總結(jié)及心得體會(huì):本次實(shí)驗(yàn)中接觸到的代換密碼我們已經(jīng)很熟悉了,因?yàn)榫S吉尼亞密碼就是多表代換中重要的一種,同時(shí)我們還需要將其與之前學(xué)到的置換密碼區(qū)分開(kāi),實(shí)驗(yàn)中發(fā)現(xiàn),若將多表代換密碼的技術(shù)與置換密碼的技術(shù)結(jié)合起來(lái)得到的加密技術(shù)的安全性應(yīng)該有很高的保證。實(shí)驗(yàn)報(bào)告學(xué)生姓名李昕宜學(xué)號(hào)2指導(dǎo)老師實(shí)驗(yàn)地點(diǎn)N3實(shí)驗(yàn)時(shí)間2018/3/20班級(jí)一班實(shí)驗(yàn)室名稱(chēng):SimpleSPC信息安全云實(shí)驗(yàn)系統(tǒng)實(shí)驗(yàn)項(xiàng)目名稱(chēng):古典密碼——移位密碼實(shí)驗(yàn)學(xué)時(shí):1學(xué)時(shí)實(shí)驗(yàn)原理:1)算法原理a)移位密碼就就是對(duì)26個(gè)字母進(jìn)行移位操作,可以移動(dòng)任意位數(shù),這樣就實(shí)現(xiàn)了對(duì)明文的加密,移位操作簡(jiǎn)單易行,因此,加密解密比較簡(jiǎn)單。b)移位密碼的基本思想:移位密碼算法c=m+k(mod26),k可以使0<k<26的任意整數(shù)。加密算法:x=x+k(mod26),解密算法x=x-k(mod26)。當(dāng)K=3,時(shí),為凱撒密碼。2)算法參數(shù)

移位密碼算法主要有c、m、k三個(gè)參數(shù)。c為密文,m就是明文,k為密鑰。3)算法流程

算法流程如下。如圖所示實(shí)驗(yàn)?zāi)康?1)學(xué)習(xí)移位密碼的原理2)學(xué)習(xí)移密碼的實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:1、在虛擬機(jī)上運(yùn)行移位密碼、exe可執(zhí)行文件,根據(jù)提示輸入明文與密鑰,同時(shí)檢查輸出的解密后的結(jié)果就是否與明文一致。2、學(xué)習(xí)掌握移位密碼的原理,并根據(jù)明文與密鑰計(jì)算出對(duì)應(yīng)的加密文,并與程序輸出的結(jié)果進(jìn)行比對(duì),掌握其加密解密的過(guò)程。3、瞧懂實(shí)驗(yàn)程序代碼,如有需要可在其上進(jìn)行優(yōu)化。實(shí)驗(yàn)器材(設(shè)備、虛擬機(jī)名稱(chēng)):Windows7工具:C:\tools\密碼學(xué)課程\01密碼學(xué)算法\02古典密碼\06移位密碼算法實(shí)驗(yàn)步驟:一、查瞧移位密碼算法運(yùn)行結(jié)果并學(xué)習(xí)核心算法1、1點(diǎn)擊【移位密碼、exe】,選擇【0】對(duì)明文進(jìn)行加密。如圖1所示圖11、2重新運(yùn)行程序,選擇【1】,對(duì)密文進(jìn)行解密。如圖2所示圖21、3移位密碼的核心算法如下所示。//#include"stdafx、h"#include<iostream>#include"conio、h"#include<string>usingnamespacestd;voidISD_yiwei_Secret(string&code,intk){ inti; for(i=0;i<code、length();i++) { if((code[i]+k)>'z') { code[i]=((code[i]+k)%'z')+'a'-1; } else { code[i]=code[i]+k; } code[i]=code[i]-32; }}voidISD_yiwei

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論