實(shí)驗(yàn)一:希爾密碼_第1頁(yè)
實(shí)驗(yàn)一:希爾密碼_第2頁(yè)
實(shí)驗(yàn)一:希爾密碼_第3頁(yè)
實(shí)驗(yàn)一:希爾密碼_第4頁(yè)
實(shí)驗(yàn)一:希爾密碼_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一:希爾密碼(Hill Cipher)的實(shí)現(xiàn)姓名韋能龍班級(jí)2011學(xué)號(hào)11350023實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)實(shí)驗(yàn),使學(xué)生對(duì)古典密碼學(xué)有充分的認(rèn)識(shí);學(xué)會(huì)正確使用編程語(yǔ)言(C、Mathematica、Maple等)實(shí)現(xiàn)希爾密碼,驗(yàn)證課堂中所學(xué)的古典密碼算法;為學(xué)習(xí)現(xiàn)代密碼算法及其應(yīng)用奠定基礎(chǔ)。實(shí)驗(yàn)內(nèi)容及要求1、學(xué)生自己隨機(jī)選取一個(gè)5´5矩陣,判斷是否可以作為密鑰2、利用所選密鑰,對(duì)給定的5元明文信息進(jìn)行加解密3、對(duì)加密得到的密文進(jìn)行解密,驗(yàn)證結(jié)果的正確性實(shí)驗(yàn)結(jié)果(可續(xù)頁(yè))(包括實(shí)驗(yàn)代碼、實(shí)驗(yàn)結(jié)果)1、如下是我的程序運(yùn)行時(shí)的界面: 我的程序設(shè)定的是讓電腦隨機(jī)生成1到100的整數(shù),隨機(jī)生成的矩陣不

2、一定能成為秘鑰,因?yàn)槟艹蔀榧用苊罔€的充分必要條件是gcd(det K,26)=1,如圖: 嘗試成功后決定用下面矩陣為秘鑰矩陣: 我寫的程序能提供加密解密功能,并且還可以更改秘鑰,如下圖:輸入1 加密,輸入2解密,如下圖:由上圖可知,明文和密文經(jīng)加密和解密后前后相同,說(shuō)明程序運(yùn)行正確。2、實(shí)驗(yàn)代碼如下:#include<iostream>#include<string>#include<ctime>#include<cstdlib>using namespace std;const int M=5;/這個(gè)函數(shù)用來(lái)求公約數(shù)int gcd(int a,

3、int b)if(a%b=0)return b;return gcd(b,a%b);/下面是加密或者解密函數(shù)。string encryption_or_decryption(int a1,int a2 ,string s1,int aMM)string s2;int PlaintextM;/明文數(shù)組int ciphertextM=0;/密文數(shù)組for(int i=0;i<M;i+)Plaintexti = s1i - a1;for(int i=0;i<M;i+)for(int j=0;j<M;j+)ciphertexti+=Plaintextj*aij;ciphertexti

4、%=26;if(ciphertexti<0)ciphertexti+=26;char dd = ciphertexti + a2;s2.push_back(dd);return s2;/下面這個(gè)函數(shù)是用來(lái)計(jì)算行列式的。int DET(int n ,int c MM) if(n=2)return c00*c11-c01*c10; int i_1,j_1,d; /d為數(shù)組b的行 int bMM; /用于存放余子式 int p=0,q=0; int sum=0; for(i_1=0;i_1<n;i_1+) for(d=0;d<n-1;d+) if(d<i_1) p=0; el

5、se p=1; for(j_1=0;j_1<n-1;j_1+) bdj_1=cd+pj_1+1; if(i_1%2=0) q=1; else q=-1; sum=sum+ci_10*q*DET(n-1,b); return sum;void show()cout<<" *"<<endl;cout<<" *"<<endl;cout<<" * 歡迎使用加解密系統(tǒng) *"<<endl;cout<<" *請(qǐng)根據(jù)提示輸入秘鑰、明文和密文*"

6、;<<endl; cout<<" *"<<endl;cout<<" *"<<endl;cout<<"按回車鍵有電腦隨機(jī)生成秘鑰矩陣"<<endl;system("pause"); cout<<endl;cout<<endl;int main()show();srand(time(0);next:int aMM;/存儲(chǔ)原矩陣int _aMM;/a的逆矩陣int bMM;/a儲(chǔ)伴隨矩陣int det = 0; /

7、行列式int _det = 0; /行列式的逆for(int i=0;i<M;i+)for(int j=0;j<M;j+)aij=rand() % 100;cout<<"由電腦隨機(jī)生成的秘鑰矩陣:"<<endl;for(int i=0;i<M;i+)for(int j=0;j<M;j+)cout<<aij<<" "cout<<endl;for(int i=0;i<M;i+)for(int j=0;j<M;j+)int A_i_j=0;int cMM;/用于存儲(chǔ)

8、余子式的矩陣int q=0;/行int p=0;/列/下面這兩個(gè)循環(huán)完成了除去第i行第j列的余子式for(int k=0;k<M-1;k+)for(int t=0;t<M-1;t+)if(k<i)q=0;else q=1;if(t<j)p=0;else p=1; ckt=ak+qt+p;int pp = 0;if(i+j)%2=0) pp=1; else pp=-1;A_i_j = pp * DET(M-1,c);bji = A_i_j; /輸出伴隨矩陣cout<<"伴隨矩陣: "<<endl;for(int i=0;i<

9、;M;i+)for(int j=0;j<M;j+)cout<<bij<<" "cout<<endl;/求行列式for(int i=0; i<M;i+)det+=a0i*bi0;cout<<"行列式為:"<<det<<endl;cout<<"行列式與26的公約數(shù)"<<gcd(det,26)<<endl;/矩陣K在模26情形下存在可逆矩陣的充分必要條件是gcd(det K ,26)=1 if(gcd(det,26)!=1

10、 && gcd(det,26)!= -1) cout<<"該秘鑰不存在逆矩陣,按回車鍵重新隨機(jī)生成新的秘鑰矩陣:"<<endl;system("pause");goto next;det = det % 26;if(det<0)det+=26;/求行列式的逆for(int k= 0;k<26;k+)if(k*26+1)%det=0)_det = (k*26+1)/det;break;cout<<"行列式的逆為:"<<_det<<endl;/求逆矩陣

11、,行列式的逆 * 伴隨矩陣 = 逆矩陣 for(int i=0;i<M;i+)for(int j=0;j<M;j+)int w=0;w = _det * bij %26;if(w<0)w+=26;_aij= w;cout<<"逆矩陣為:"<<endl;for(int i=0;i<M;i+)for(int j=0;j<M;j+)cout<<_aij<<" "cout<<endl;next1:cout<<" * 1:加密 *"<&l

12、t;endl;cout<<" * 2:解密 *"<<endl;cout<<" * 3:退出 *"<<endl;cout<<" * 4:更改秘鑰 *"<<endl;int nn;cin>>nn;int a1=65,a2=97;if(nn=1)string s1,s2;cout<<"請(qǐng)輸入輸入明文:"<<endl;cin>>s1;s2 = encryption_or_decryption(a2,a1,s1,a);cout<<"密文為: "<<s2<<endl;goto next1;else if(nn=2)string s1,s2;cout<<"請(qǐng)輸入輸入密文:"<<endl;cin>>s1;s2 = encryption_or_decryption(a1,a2,s1,_a);cout<<"解密后的明文: "&l

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論