凱撒密碼和playfair密碼-實(shí)驗(yàn)報(bào)告_第1頁(yè)
凱撒密碼和playfair密碼-實(shí)驗(yàn)報(bào)告_第2頁(yè)
凱撒密碼和playfair密碼-實(shí)驗(yàn)報(bào)告_第3頁(yè)
凱撒密碼和playfair密碼-實(shí)驗(yàn)報(bào)告_第4頁(yè)
凱撒密碼和playfair密碼-實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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)介

1、一預(yù)習(xí)準(zhǔn)備1. 實(shí)驗(yàn)?zāi)康?(1). 熟記古典對(duì)稱(chēng)密碼的概念和特點(diǎn);(2). 理解若干種古典密碼體制的原理; (3). 掌握維吉尼亞及Playfair密碼體制的編程實(shí)現(xiàn)。 2. 實(shí)驗(yàn)環(huán)境Widows7操作系統(tǒng)、Microsoft Visual Studio 2010 (選擇自己熟悉的編程語(yǔ)言和環(huán)境)3. 實(shí)驗(yàn)內(nèi)容和要求(1)實(shí)驗(yàn)內(nèi)容1. 實(shí)現(xiàn)維吉尼亞密碼體制;2. 實(shí)現(xiàn)Playfair密碼體制。 (2) 實(shí)驗(yàn)要求1復(fù)習(xí)課本/課件相關(guān)內(nèi)容。2程序中不能固定密鑰詞,即用戶(hù)可自行輸入密鑰詞,然后對(duì)輸入的明文進(jìn)行加密,或?qū)斎氲拿芪倪M(jìn)行解密二. 編程思路(實(shí)驗(yàn)原理)維吉尼亞密碼原理:引入了“密鑰”的概念

2、,即根據(jù)密鑰來(lái)決定用哪一行的密表來(lái)進(jìn)行替換,以此來(lái)對(duì)抗字頻統(tǒng)計(jì)。Playfair原理:根據(jù)下列規(guī)則一次對(duì)明文的兩個(gè)字母加密: (1)、屬于相同對(duì)中的重復(fù)的明文字母將用一個(gè)填充字母進(jìn)行分隔,因此,詞balloon將被加密為ba lx lo on。 (2)、屬于該矩陣相同行的明文字母將由其右邊的字母替代,而行的最后一個(gè)字母由行的第一個(gè)字母代替。例如,ar被加密為RM。 (3)、屬于相同列的明文字母將由它下面的字母代替,而列的最后一個(gè)字母由列的第一個(gè)字母代替。例如,mu被加密為CM。 (4)、否則,明文的其他字母將由與其同行,且與下一個(gè)同列的字母代替。因此,hs成為BP,ea成為IM(或JM,這可根

3、據(jù)加密者的意愿而定)。 三. 實(shí)驗(yàn)總結(jié) 1. 實(shí)驗(yàn)程序(詳細(xì)設(shè)計(jì))維吉尼亞代碼:#include#include#include#define N 80int main(void)char messageN; int n,i; int length;printf(明文:);gets(message); printf(密鑰:);scanf(%d,&n);printf(明文:); puts(message); printf(n);length=strlen(message);for(i=0;i=A & messagei=a & messagei=z)messagei=(messagei-a)+n)

4、%26+a;else continue;puts(密文:); puts(message);printf(n);return 0;Playfair代碼:void encrypt() int i,k;const int N=100;char letters26=ABCDEFGHIKLMNOPQRSTUVWXYZ;/用于填充矩陣int flag25=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/字母是否已在矩陣中,與letters數(shù)組對(duì)應(yīng)char ch55;/5X5矩陣char ch1N;/密鑰char ch2N;/明文char ch4;/無(wú)關(guān)

5、字符int len=a-A;coutch1;int flg=1;while(flg=1)for(int i=0;iz|ch1ia)cout請(qǐng)重新選擇操作:endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;istrlen(ch1);i+)if(ch1i=J)ch1i=I;i=0;int j=0;for(int k=0;kstrlen(ch1);k+)for(int t=0;t25;t+)if(ch1k=letterst&flagt=0)chij=letterst;flagt=1;if(j4)j+;else i+;j=0;for( k=0;k

6、25;k+)if(flagk=0)chij=lettersk;flagk=1;if(j4)j+;elsei+;j=0;cout密鑰填充后的矩陣為: endl;for(i=0;i5;i+) for(j=0;j5;j+)coutchij;cout ;if(j=4)coutendl;coutendl;coutch2;coutch4;if(ch4=a)ch4=ch4-len;for(k=0;k=a)ch2k=ch2k-len;for(k=0;kstrlen(ch2);k+)/把明文中的J都變?yōu)镮if(ch2k=J)ch2k=I;/為明文添加必要的無(wú)關(guān)字符以防止同一組的兩個(gè)字符相同for( k=0;kk

7、;t-)ch2t+1=ch2t;ch2k+1=ch4;/若明文有奇數(shù)個(gè)字符,則添加一個(gè)無(wú)關(guān)字符以湊夠偶數(shù)個(gè)if(strlen(ch2)%2!=0)ch2strlen(ch2)+1=ch2strlen(ch2);/字符串結(jié)尾賦0ch2strlen(ch2)=ch4;/明文串尾插入無(wú)關(guān)字符cout經(jīng)過(guò)處理后的明文為:;for(k=0;kstrlen(ch2);k+=2)coutch2kch2k+1 ;coutendl;cout其最終長(zhǎng)度為:strlen(ch2)endl;/明文輸入并整理完畢/for(k=0;kstrlen(ch2);k+=2)int m1,m2,n1,n2;for(m1=0;m1

8、=4;m1+)for(n1=0;n1=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2=4;m2+)for(n2=0;n24)n1=n1%5;m1=m1+1;if(n24)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+1)%5;ch2k+1=chm2(n2+1)%5;elseif(n1=n2)ch2k=ch(m1+1)%5n1;ch2k+1=ch(m2+1)%5n2;elsech2k=chm1n2;ch2k+1=chm2n1;cout加密后所得到的密文是:;for(k=0;kstrlen(ch2

9、);k+=2)coutch2kch2k+1 ;coutendl;else break;/解密算法void decrypt() int i,k;const int N=100;char letters26=ABCDEFGHIKLMNOPQRSTUVWXYZ;/用于填充矩陣int flag25=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/標(biāo)記字母是否已在矩陣中,與letters數(shù)組對(duì)應(yīng)char ch55;/5X5矩陣char ch1N;/密鑰char ch2N;/密文int len=a-A;int flg=1;coutch1;while(f

10、lg=1)for(int i=0;iz|ch1ia)cout請(qǐng)重新選擇操作:endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;istrlen(ch1);i+)/把密鑰中的J都變?yōu)镮if(ch1i=J)ch1i=I;i=0;int j=0;/把密鑰中的字母填入到矩陣中,并把該字母標(biāo)記為已用for(int k=0;kstrlen(ch1);k+)for( int t=0;t25;t+)if(ch1k=letterst&flagt=0)chij=letterst;flagt=1;if(j4)j+;else i+;j=0;for( k=0;k25

11、;k+)/按字母表順序把未用字母依次填入到矩陣中if(flagk=0)chij=lettersk;flagk=1;if(j4)j+;elsei+;j=0;cout密鑰填充后的矩陣為: endl;for(i=0;i5;i+)for(j=0;j5;j+)coutchij;cout ;if(j=4)coutendl;coutendl;/矩陣生成完畢/int f=0;docoutch2;for(int k=0;k=a)ch2k=ch2k-len;for( k=0;kstrlen(ch2);k+)/把密文中的J都變?yōu)镮if(ch2k=J)ch2k=I;for( k=0;kstrlen(ch2);k+=2

12、)if(ch2k=ch2k+1)cout同一分組中不能出現(xiàn)相同字符!請(qǐng)重新輸入。endl;f=1;break;else f=2;if(f=1)continue;if(strlen(ch2)%2!=0)cout字符串不能為奇數(shù)個(gè)!請(qǐng)重新輸入。endl;f=1;else f=2;while(f=1);/解密開(kāi)始for( k=0;kstrlen(ch2);k+=2)int m1,m2,n1,n2;for(m1=0;m1=4;m1+)for(n1=0;n1=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2=4;m2+)for(n2=0;n24)n1=n1%5;m1=m1+1;if(n24)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+4)%5;ch2k+1=chm2(n2+4)%5;elseif(n

溫馨提示

  • 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)論