版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、上機實驗報告(一)實驗課程:應用密碼學 實驗時間:2013年9月26日任課教師:劉光軍班級:11級信息與計算科學專業(yè)1班 姓名:劉靜 學號:0202110123一、實驗名稱: 密碼學基本算法的實現(xiàn)(一)二、實驗目的學習常見的古典密碼學算法,通過編程實現(xiàn)替代密碼算法和置換密碼算法,加深對古典密碼體制的了解,為深入學習密碼學奠定基礎。三、實驗要求1、在D盤建立一個自己的文件夾;2、開啟軟件平臺Visual C+6.0,在此環(huán)境下進行編程實驗;3、將題目、你輸入的命令、程序及運行結(jié)果保存在word文件中,作為作業(yè)提交; 4、若出現(xiàn)錯誤,修改、運行直到輸出正確結(jié)果。四、報告正文(文檔,數(shù)據(jù),模型,程序
2、,圖形)1、編寫程序?qū)崿F(xiàn)仿射加密和Playfair密碼。通過討論分析單表代替密碼和多表代替密碼算法的功能需求,詳細設計實現(xiàn)代替密碼算法的數(shù)據(jù)結(jié)構(gòu)和流程,給出測試用例和測試步驟,得出測試和結(jié)論。算法的實現(xiàn)程序必須提供加密和解密兩個接口:intencrypt()和intdecrypt()。當加密或者解密成功時返回CRYPT_OK,失敗時返回CRYPT_ERROR。/*加密的實現(xiàn)*/#include #include #include char book55= ; /密碼本.設為全局變量. /*查找在密碼本中的位置。*/int findlocation(char m,int *t)int i,j;i
3、nt temp; /表示行數(shù).for(i=0;i5;i+)for(j=0;j5;j+)if(m=bookij)*t=j;temp=i;i=5; /不必再循環(huán)。j=5;return temp; /返回行數(shù)。/*密碼輸出函數(shù)*/void out_put(int s0,int t0,int s1,int t1)char c2= ;if(s0=s1) /同一行。c0=books0(t0+1)%5;c1=books0(t1+1)%5;else if(t0=t1) /同一列.c0=book(s0+1)%5t0;c1=book(s1+1)%5t0;else /不同行不同列.c0=books0t1;c1=bo
4、oks1t0;printf(%c,c0); /輸出已加密的兩個字符.printf(%c,c1);/*對明文加密. */ void Encrypt()char m2= ; /明文數(shù)組.char temp,ch;char flag1,flag2; /用來標志上一輪中處理的第二個字母,提高解密精度.int s0,t0,s1,t1,i; /兩個字符的位置參數(shù).temp= ; /初始化為空字符.i=0; /控制變量.flag1=m1; /初始化.while(ch=getchar()!=n)if(ch= ) /如果輸入的是空格跳過去.continue;if(ch=j) /如果輸入的是j則當作i處理.ch=
5、i;mi+=ch; /賦入數(shù)組.if(temp!= ) /如果上一步操作中有兩個相同的字母.m1=m0;m0=temp;temp= ;i=2; /標志變量,不必再輸入下一個.if(i!=2) /數(shù)組賦滿,則跳過.continue;i=0;if(m0=m1) /如果兩個字母相同,則處理成不相同的.temp=m1;flag2=x;while(m1=m0|m1=flag1)m1=flag2+;flag1=m1;s0=findlocation(m0,&t0); /列值傳遞的是地址.s1=findlocation(m1,&t1);m0= ;out_put(s0,t0,s1,t1);/在密碼本中打印密碼.
6、 /*不會出現(xiàn)的情況是:temp!= & m0!=n */if(temp!= |m0!= ) /此處是為了防止出現(xiàn)什么也沒有輸入的情況。if(m0= &temp!= ) /最后剛好剩余一位.m0=temp;m1=flag2=x;while(m1=m0|m1=flag1)m1=flag2+;if(temp= &m0!= ) /最后剩余一位并且上一輪中有相同的字母./m0=temp;m1=flag2=x;while(m1=m0|m1=flag1)m1=flag2+;s0=findlocation(m0,&t0);s1=findlocation(m1,&t1);out_put(s0,t0,s1,t1
7、);/*構(gòu)造密碼本*/void createbook()char key; /key密鑰int temp25= ;/臨時數(shù)組,記錄密鑰中出現(xiàn)字母的位置. int t,flag=0; /輔助變量. flag用于定位新出現(xiàn)字母的位置. /*構(gòu)造密碼本. */ for(t=0;t25;t+) /對整型數(shù)組賦值. tempt=26;while(key=getchar()!=n) /此處要極其注意,用換行符表示其結(jié)束. if(keyj)t=key-a-1;if(tempt=26) /若未出現(xiàn)過,則記錄其位置. tempt=flag+;for(t=0;t25;t+) /完善字母的順序,并映射到密碼本。if
8、(tempt=26) /將未出現(xiàn)過的字母按字母表順序在數(shù)組中編號. tempt=flag+;if(t+aj)/按照次序?qū)⑴R時數(shù)組中的字母映射到密碼本中. booktempt/5tempt%5=t+a; /處理小于i的情況。else booktempt/5tempt%5=t+a+1; /處理大于j的情況。for(t=0;t25;t+) /打印。printf(%d ,tempt); printf(n);for(t=0;t25;t+) /打印。printf( %c,bookt/5t%5);if(!(t+1)%5) printf(n);/*主函數(shù)*/int main()createbook(); /構(gòu)
9、造密碼本。Encrypt(); /進行加密。printf(n);return 0;/*解密*密碼本構(gòu)造函數(shù)相同.*部分不同.*/#include #include #include char book55= ; /密碼本.設為全局變量. /*查找在密碼本中的位置。*/int findlocation(char m,int *t)int i,j;int temp; /表示行數(shù).for(i=0;i5;i+)for(j=0;j5;j+)if(m=bookij)*t=j;temp=i;i=5; /不必再循環(huán)。j=5;return temp; /返回行數(shù)。/*密碼輸出函數(shù)*/void out_put(c
10、har str1001)char c2= ;char cip1001;int s0,t0,s1,t1;int i,j;i=j=0;while(stri!=0)s0=findlocation(stri+,&t0);s1=findlocation(stri+,&t1);if(s0=s1) /同一行。c0=books0(t0+4)%5;c1=books0(t1+4)%5;else if(t0=t1) /同一列.c0=book(s0+4)%5t0;c1=book(s1+4)%5t0;else /不同行不同列.c0=books0t1;c1=books1t0;cipj+=c0;cipj+=c1;j=str
11、len(str);i=0;while(i+2j)printf(%c,cipi);if(cipi!=cipi+2)i+;elsei+=2;if(i!=j-1)printf(%c,cipi+);printf(%cn,cipi);/*對密文解密. */ void Decry()char str1001;gets(str);if(strlen(str)%2=1)printf(密文的個數(shù)不能是奇數(shù)!);return 0;elseout_put(str);/*構(gòu)造密碼本*/void createbook()char key; /key密鑰int temp25= ;/臨時數(shù)組,記錄密鑰中出現(xiàn)字母的位置. i
12、nt t,flag=0; /輔助變量. flag用于定位新出現(xiàn)字母的位置. /*構(gòu)造密碼本. */ for(t=0;t25;t+) /對整型數(shù)組賦值. tempt=26;while(key=getchar()!=n) /此處要極其注意,用換行符表示其結(jié)束. if(keyj)t=key-a-1;if(tempt=26) /若未出現(xiàn)過,則記錄其位置. tempt=flag+;for(t=0;t25;t+) /完善字母的順序,并映射到密碼本。if(tempt=26) /將未出現(xiàn)過的字母按字母表順序在數(shù)組中編號. tempt=flag+;if(t+aj)/按照次序?qū)⑴R時數(shù)組中的字母映射到密碼本中. booktempt/5tempt%5=t+a; /處理小于i的情況。else booktempt/5tempt%5=t+a+1; /處理大于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年洗車店員工工作環(huán)境與職業(yè)安全合同
- 二零二五年度裝修合同欺詐責任認定與消費者權益保護
- 二零二五年度裝飾公司施工圖紙審核勞動合同
- 2025年度私人雇傭家政服務合同范本
- 二零二五年度綠色建筑施工現(xiàn)場環(huán)境衛(wèi)生合同
- 2025年度石油化工產(chǎn)品貨物運輸合同模板:安全環(huán)保要求
- 二零二五年度汽車銷售與培訓教育合同
- 二零二五年度房屋租賃合同簽訂中的保險問題重要性研究
- 2025年度戶外景觀設計與施工合同4篇
- 二零二五年度煤炭運輸居間服務與能源安全合作合同3篇
- 寒潮雨雪應急預案范文(2篇)
- 垃圾車駕駛員聘用合同
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個人合同模板
- 八年級語文下冊 成語故事 第十五課 諱疾忌醫(yī) 第六課時 口語交際教案 新教版(漢語)
- 2024年1月高考適應性測試“九省聯(lián)考”數(shù)學 試題(學生版+解析版)
- EPC項目采購階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設與設備配置標準
- 四川2024年專業(yè)技術人員公需科目“數(shù)字經(jīng)濟與驅(qū)動發(fā)展”參考答案(通用版)
- 煤炭裝卸服務合同
- 廣東省佛山市順德區(qū)2023學年中考一模物理試題(含答案解析)
評論
0/150
提交評論