版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)器人課件-機(jī)器人控制
- 【物理課件】阿基米的原理課件
- 《情商訓(xùn)練》課件
- 《企業(yè)安全知識(shí)演講》課件
- 單位管理制度展示合集【人事管理篇】十篇
- 單位管理制度展示大全【人力資源管理】十篇
- 豐田改善內(nèi)部課件.圖
- 單位管理制度品讀選集【員工管理篇】十篇
- 2024年汽車銷售工作計(jì)劃書(34篇)
- 食品安全監(jiān)管基礎(chǔ)與風(fēng)險(xiǎn)防控課件
- 江蘇省宿遷市沭陽(yáng)縣2023-2024學(xué)年八年級(jí)上學(xué)期期末英語(yǔ)試題
- 安全隱患大排查大整治專項(xiàng)行動(dòng)方案
- 藍(lán)軍戰(zhàn)略課件
- 科學(xué)計(jì)算語(yǔ)言Julia及MWORKS實(shí)踐 課件8 - 基本數(shù)據(jù)類型
- 湖北省黃岡市2023-2024學(xué)年高一上學(xué)期期末考試化學(xué)試題(含答案)
- 物流公司安全生產(chǎn)監(jiān)督檢查管理制度
- DB22T 277-2011 建筑電氣防火檢驗(yàn)規(guī)程
- DB52T 1696-2022 口腔綜合治療臺(tái)用水衛(wèi)生管理規(guī)范
- 2025屆上海市復(fù)旦附中浦東分校物理高二上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 快樂(lè)讀書吧:童年(專項(xiàng)訓(xùn)練)-2023-2024學(xué)年六年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版)(含答案)
- 2023-2024學(xué)年廣東省廣州市海珠區(qū)九年級(jí)(上)期末英語(yǔ)試卷
評(píng)論
0/150
提交評(píng)論