【正文】
(float) g:(int)x :(int)y。 float g(int x, int y)。 祝愿他們?cè)诮窈蟮纳?、學(xué)習(xí)、事業(yè)中,一切順利,勇攀高峰。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 22 頁 共 45 頁 致 謝 在本次畢業(yè)設(shè)計(jì)完成論文的過程中,我得到了許多老師和同學(xué)的關(guān)懷和幫助,使我能夠順利完成畢業(yè)設(shè)計(jì)和論文 ,在此我向他們表示衷心的感謝! 我的 論文從選題、算法實(shí)現(xiàn)到最后畢業(yè)論文的撰寫都得到了李老師的專業(yè)指導(dǎo)和嚴(yán)格要求。研究分析并實(shí)現(xiàn)了仿射加密法,多文字加密法, Vigenere 加密法以及 Hill 加密法四種加密法的加 密與解密算法。 測(cè)試數(shù)據(jù) :tangyang 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 18 頁 共 45 頁 關(guān)鍵字: takes 密鑰: 表 多文字加密的密鑰 t a k e s t a b c d e a f g h i k k l m n o p e q r s t u s v w x y z 根據(jù)給定測(cè)試數(shù)據(jù)得加密后的數(shù)據(jù)為: tangyang,如圖 所示: 圖 多文字加密法加密測(cè)試 將測(cè)試數(shù)據(jù)加密后的數(shù)據(jù)解密后得原測(cè)試數(shù)據(jù): tangyang,如圖 所示: 圖 多文字加密法解密測(cè)試 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 19 頁 共 45 頁 Vigenere加密算法測(cè)試 Vigenere 加密法的關(guān)鍵 詞為不重復(fù)的字母,密鑰為重復(fù)的關(guān)鍵詞組成的字符串。 j 4。 } } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 16 頁 共 45 頁 } void CHillPasswd::setNArray(int array[][4]) { int i, j。 i 4。 (%s,obvious)。 obvious[j+2] = Passwd[j+2]。 } if (less == 2) { obvious[j] = Passwd[j]。 obvious[j+3] = (ArrayNKey[3][0] * (Passwd[j] 32) + ArrayNKey[3][1] * (Passwd[j+1] 32) + ArrayNKey[3][2] * (Passwd[j+2] 32) + ArrayNKey[3][3] * (Passwd[j+3] 32)) % 95 + 32。 obvious = new char[textLen]。 int N = textLen/4。 (%s,Passwd)。 Passwd[j+2] = obvious[j+2]。 } if (less == 2) { Passwd[j] = obvious[j]。 Passwd[j+3] = (ArrayKey[3][0] * (obvious[j] 32) + ArrayKey[3][1] * (obvious[j+1] 32) + ArrayKey[3][2] * (obvious[j+2] 32) + ArrayKey[3][3] * (obvious[j+3] 32)) % 95 + 32。 Passwd = new char[textLen]。 int N = textLen/4。將這些數(shù)值代入以上方程組得出密文的數(shù)值: c1=((8 (11632)+6 (9732)+9 (11032)+5 (10332)) mod 95)+32=61 c2=((6 (11632)+9 (9732)+5 (11032)+10 (10332)) mod 95)+32=36 c3=((5 (11632)+8 (9732)+4 (11032)+9 (10332)) mod 95)+32=118 c4=((10 (11632)+6 (9732)+11 (11032)+4 (10332)) mod 95)+32=124 將這些值轉(zhuǎn)化回字母后,就是密文 =$v|。例如,第 i 塊含有字符 p1,p2, … ,pm,寫成如下形式: bi =????????????mpp...p21 那么密文就由如下計(jì)算結(jié)果確定: ????????????mcc...c21=????????????nmnnmkkkkkkk???k?k21222211m1211????????????mpp...p21 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 13 頁 共 45 頁 算法分析 Hill 加密法中,密鑰矩陣越大,該加密法抗擊能力就越強(qiáng),即越不容易被破解。加密密鑰是矩陣 M,則解密密鑰是 M1。 確定密鑰后將明文字母轉(zhuǎn)換成數(shù)字形式,帶入以上方 程組,解方程組,得出密文的數(shù)值。 } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 12 頁 共 45 頁 5 Hill 加密法 算法概述 Hill 加密法是經(jīng)典多圖加密法的一種,要成功使用多圖加密法,需要將數(shù)學(xué)方法應(yīng)用到密碼學(xué)中去, Hill 提出了一種基于聯(lián)立方程的加密算法。 } } obvious[k] = 39。 } if (t == 26) { obvious[k] = Passwd[k]。 i = getPassNum(chi)。amp。amp。 getPassKey(passKey,chPassKey,textLen)。 Passwd = (textLen)。 int i = 26, j = 26, k, t。 i 26。\039。 } else { if (flag == 1) { Passwd[k] = ArrayKey[i][j] 32。 } else chj = obvious[k]。 if (obvious[k] 64 amp。 k++) { if (chPassKey[k] 64 amp。 char *chPassKey = new char[textLen]。 int textLen = ()。 } } CString CVienerePasswd::VIGAddPass(CString newText,CString passKey) { int i = 26,j = 26,k。 i N。 char *strText = (())。 例如將上述密文“ faxkkaxk”解密。 在 Vigenere 表中查找“ m”列和“ t”行,找到結(jié)果密文字母“ f”,重復(fù)這個(gè)過程,可以生成以下的密文: 表 加密后的明文、密文對(duì)照表 密鑰 m a k e m a k e 明文 t a n g y a n g 密文 f a x k k a x k 則明文“ tangyang”在關(guān)鍵詞為“ make”時(shí),密文為“ faxkkaxk”。 Vigenere 加密法,關(guān)鍵詞寫在明文的上面,并且不斷重復(fù)書寫,這樣每個(gè)明文字母都與一個(gè)關(guān)鍵詞的字母關(guān)聯(lián),例如,關(guān)鍵詞為“ make”,而明文為“ tangyang”的情況下,關(guān)聯(lián)詞 明文的關(guān)聯(lián)如下所示 : 表 密文、明文對(duì)照表 m a k e m a k e t a n g y a n g 利用如圖 所示的 Vigenere 表 ,這些字母對(duì)就可以用來確定明文字符的加密結(jié)果。 (%s,obvious)。 k++。 } } if(flag == 0){ obvious[k] = Passwd[n]。 break。 while(n textLen) { flag = 0。 Passwd = (textLen)。 CString result。\039。 } } } if (flag == 0) { Passwd[n] = obvious[k]。 Passwd[n+1] = chKey[j]。j39。 i++) { for(j = 0。 //密鑰數(shù)組 (())。 Passwd = new char[2 * textLen]。 核心代碼 //加密函數(shù) CString CMoreWordPasswd::MWAddPass(CString newText,CString passKey) { int textLen = ()。 例如,如果關(guān)鍵詞為 takes,那么密鑰矩陣為: 表 密文、明文對(duì)照表 t a k e s t a b c d e a f g h i k k l m n o p e q r s t u s v w x y z 每個(gè)明文由標(biāo)識(shí)該字母的行和列的字母對(duì)替代,加密過程為查找標(biāo)識(shí)該字母的行和列的字母對(duì)的過程。 多文字加密法的密鑰是一個(gè) 5 5 的矩陣。 (%s,obvious)。 p = (fa * m_b) % 95。 i N。 obvious = new char[N]。 char p,mida。i++) { n = 95 * i + 1。 return newText。 Passwd[i] = c + 32。 for (i = 0。 N = ()。因此,利用這個(gè)密鑰,字“ tangyang”可以使用放射加密法加密?,F(xiàn)在,假設(shè)p 為明文字母的數(shù)字(譯注:即該字母在字母表中對(duì)應(yīng)的數(shù)字), c 為密文字母的數(shù)字, m1為 m 的乘法的逆元, n1為 n 的加法的逆元,那么,這兩個(gè)數(shù)字之間的關(guān)系可以用如下等式表示: 26 m od )( nmpc ?? 26 m o d )( 11 ?? ?? ncmp 由于傳統(tǒng)的仿射加密算法只對(duì) 26 個(gè)字母進(jìn)行加密,為了解決這一局限,對(duì)一般符號(hào)也能進(jìn)行加密,從而采用 ASCII 碼表作為加密參考,將模改為 95(注: ASCII 碼值有 128 個(gè),由于前 33 個(gè)為不可顯示字符,因此在加密的過程中排除,故將模改為 95)。加之,密碼學(xué)是一個(gè)很抽象的東西,不容易理解,所以,學(xué)習(xí)經(jīng)典密碼學(xué)對(duì)于初學(xué)者來說具有一定的困難與挑戰(zhàn),如果有一套介紹加密解密算法的軟件將抽象轉(zhuǎn)換為形象, 這勢(shì)必要減少 大量 學(xué)習(xí)理解密碼學(xué)知識(shí)的時(shí)間。 天貓 商城、支付寶和當(dāng)當(dāng)網(wǎng)也已被卷入其中。 Vigenere method。 六、畢業(yè)設(shè)計(jì)的進(jìn)度安排: 至 20xx320 搜集文獻(xiàn)材料,撰寫開題報(bào)告 20xx320 至 20xx331 進(jìn)行設(shè)計(jì)分析,確定設(shè)計(jì)方案 20xx401 至 20xx415 概要 設(shè)計(jì),構(gòu)思設(shè)計(jì)平臺(tái)的整體框架 20xx416 至 20xx515 詳細(xì)設(shè)計(jì)、搭建平臺(tái),編寫代碼 20xx515 至 20xx525 軟件測(cè)試、系統(tǒng)完善 20xx526 至 20xx605 撰寫畢業(yè)設(shè)計(jì)說明書 20xx606 至 20xx610 整理資料、準(zhǔn)備答辯及答辯 20xx611 至 20xx620 資料完善工作 指導(dǎo)教師簽名 專業(yè)負(fù)責(zé)人簽名 學(xué)院領(lǐng)導(dǎo)簽 名 批準(zhǔn)日期 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā) 湯陽 (陜西理工學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)計(jì)專升本 1301 班 ,陜西 漢中 723000) 指導(dǎo)教師:李 軍 【摘要】 為了在密碼學(xué)教學(xué)過程中形象的展示加密解密這一過程,設(shè)計(jì)實(shí)現(xiàn)了一款經(jīng)典加密解密教學(xué)演示軟件。陜西理工學(xué)院畢業(yè)設(shè)計(jì)