一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)畢業(yè)設(shè)計(jì)_第1頁
一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)畢業(yè)設(shè)計(jì)_第2頁
一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)畢業(yè)設(shè)計(jì)_第3頁
一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)畢業(yè)設(shè)計(jì)_第4頁
一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、陜西理工學(xué)院畢業(yè)設(shè)計(jì) 題 目 一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā) 學(xué)生姓名 湯陽 學(xué)號(hào) 1318042022 所在學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)計(jì)專升本 1301 班 指導(dǎo)教師 李軍 _ 完成地點(diǎn) 陜西理工學(xué)院 2015 年 6 月 4 日 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 本科畢業(yè)設(shè)計(jì)任務(wù)書 院(系) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)(專升本 1301) 學(xué)生姓名 湯陽 一、畢業(yè)設(shè)計(jì)題目 一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā) 二、畢業(yè)設(shè)計(jì)工作自 2014 年 12 月 9 日 起至 2015 年 6 月 20 日止 三、畢業(yè)設(shè)計(jì)進(jìn)行地點(diǎn): 陜西理工學(xué)院 四、畢業(yè)設(shè)計(jì)

2、應(yīng)完成內(nèi)容及相關(guān)要求: 單碼、多碼以及多圖加密技術(shù)在經(jīng)典密碼學(xué)中占據(jù)著及其重要的地位,也是 現(xiàn)代密碼學(xué)的基礎(chǔ)。要求設(shè)計(jì)一個(gè)演示軟件,在該軟件中能夠用經(jīng)典密碼密碼學(xué)中 的幾個(gè)典型的加密解密算法對(duì)文本進(jìn)行加密與解密。要求實(shí)現(xiàn)的功能: 1、實(shí)現(xiàn)仿射加密與解密 2、實(shí)現(xiàn)多文字加密與解密 3、實(shí)現(xiàn) vigenere 密與解密 4、實(shí)現(xiàn) hill 加密與解密 五、畢業(yè)設(shè)計(jì)應(yīng)收集資料及參考文獻(xiàn): 1、搜集關(guān)于經(jīng)典密碼學(xué)相關(guān)資料; 2、收集教學(xué)演示軟件開發(fā)的案例及相關(guān)經(jīng)驗(yàn)。 六、畢業(yè)設(shè)計(jì)的進(jìn)度安排: 至 2015-3-20 搜集文獻(xiàn)材料,撰寫開題報(bào)告 2015-3-20 至 2015-3-31 進(jìn)行設(shè)計(jì)分析,

3、確定設(shè)計(jì)方案 2015-4-01 至 2015-4-15 概要設(shè)計(jì),構(gòu)思設(shè)計(jì)平臺(tái)的整體框架 2015-4-16 至 2015-5-15 詳細(xì)設(shè)計(jì)、搭建平臺(tái),編寫代碼 2015-5-15 至 2015-5-25 軟件測(cè)試、系統(tǒng)完善 2015-5-26 至 2015-6-05 撰寫畢業(yè)設(shè)計(jì)說明書 2015-6-06 至 2015-6-10 整理資料、準(zhǔn)備答辯及答辯 2015-6-11 至 2015-6-20 資料完善工作 指導(dǎo)教師簽名 專業(yè)負(fù)責(zé)人簽名 學(xué)院領(lǐng)導(dǎo)簽名 批準(zhǔn)日期 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā)一款經(jīng)典加密解密教學(xué)演示軟件的開發(fā) 湯陽 (陜西理工學(xué)院數(shù)學(xué)與計(jì)算機(jī)

4、科學(xué)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)計(jì)專升本 1301 班,陜西 漢中 723000) 指導(dǎo)教師:李 軍 【摘要】為了在密碼學(xué)教學(xué)過程中形象的展示加密解密這一過程,設(shè)計(jì)實(shí)現(xiàn)了一款經(jīng)典加密解密教學(xué)演示軟 件。該軟件基于 microsoft visual c+ 6.0 集成開發(fā)環(huán)境,采用 c+面向?qū)ο蟪绦蛟O(shè)計(jì)方法,根據(jù)經(jīng)典密碼學(xué)中的 單碼加密、多碼加密以及多圖加密算法,實(shí)現(xiàn)了經(jīng)典密碼學(xué)中的仿射加密法、多文字加密法、vigenere 加密法和 hill 加密法四種經(jīng)典加密算法的教學(xué)演示效果。 【關(guān)鍵詞】仿射加密法;多文字加密法;vigenere 加密法;hill 加密法 陜西理工學(xué)院畢業(yè)設(shè)計(jì) the devel

5、opment of a classical encryption and decryption demo software for teaching tangyang (grade 13, upgraded class 1, major computer science and technology, school of mathematics and computer science .shaanxi university of technology, hanzhong 723000, shaanxi) tutor: li jun abstract: in order to show the

6、 process of encrypt and decrypt in the teaching of classical cryptography, a teaching demo software of a classical encryption and decryption was developed. according to the single code and multiple code encryption algorithm of classical cryptography, using object-oriented programming method, impleme

7、ntation of the affine encryption method, multiple text encryption method, vigenere encryption method and hill encryption method in microsoft visual c+ 6.0. key words: affine method; more text method; vigenere method; hill method 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 目 錄 1 課題實(shí)施的背景.1 2 仿射加密法.2 2.1 算法概述.2 2.2 算法分析.2 2.3 核心代碼.2 3

8、 多文字加密法.4 3.1 算法概述.4 3.2 算法分析.4 3.3 核心代碼.4 4 vigenere 加密法.7 4.1 算法概述.7 4.2 算法分析.8 4.3 核心代碼.8 5 hill 加密法.12 5.1 算法概述.12 5.2 算法分析.13 5.3 核心代碼.13 6 系統(tǒng)測(cè)試.17 6.1 仿射加密算法測(cè)試 .17 6.2 多文字加密算法測(cè)試 .17 6.3 vigenere加密算法測(cè)試.19 6.4 hill加密算法測(cè)試.19 總 結(jié).21 致 謝.22 參考文獻(xiàn).23 科技外文文獻(xiàn).24 附錄 a: 系統(tǒng)使用說明書.45 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 0 頁 共 45 頁

9、 1 課題實(shí)施的背景 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,大量的數(shù)據(jù)需要在網(wǎng)絡(luò)上進(jìn)行傳輸,因此,信息安全受到了越來越廣泛 的關(guān)注。近年來,我國(guó)數(shù)據(jù)竊取事件層出不窮,csdn、珍愛網(wǎng)、世紀(jì)佳緣、走秀等多家網(wǎng)站的用戶 數(shù)據(jù)庫被曝光在網(wǎng)絡(luò)上,由于部分密碼以明文方式顯示,導(dǎo)致大量網(wǎng)民的個(gè)人信息泄露。繼 csdn、 天涯社區(qū)用戶數(shù)據(jù)泄露后,互聯(lián)網(wǎng)行業(yè)一片人心惶惶,而在用戶數(shù)據(jù)最為重要的電商領(lǐng)域, 也不斷傳出用戶信息漏洞,漏洞報(bào)告平臺(tái)烏云發(fā)布漏洞報(bào)告稱,支付寶用戶大量泄露,被用于網(wǎng)絡(luò) 營(yíng)銷,泄露總量達(dá) 1200 萬2300 萬之多。天貓商城、支付寶和當(dāng)當(dāng)網(wǎng)也已被卷入其中。事實(shí)上, 選擇一種合適的加密機(jī)制將能消除消費(fèi)者的各

10、種信息安全隱患。 從古典密碼學(xué)的研究到現(xiàn)代密碼學(xué)的發(fā)展,密碼學(xué)在我們生活中扮演著越來越重要的角色。但 由于密碼學(xué)是神秘而富有冒險(xiǎn)色彩的,它不僅僅是計(jì)算機(jī)科學(xué)的內(nèi)容,因此,學(xué)習(xí)密碼學(xué)必須具有 寬廣的知識(shí)背景。加之,密碼學(xué)是一個(gè)很抽象的東西,不容易理解,所以,學(xué)習(xí)經(jīng)典密碼學(xué)對(duì)于初 學(xué)者來說具有一定的困難與挑戰(zhàn),如果有一套介紹加密解密算法的軟件將抽象轉(zhuǎn)換為形象,這勢(shì)必 要減少大量學(xué)習(xí)理解密碼學(xué)知識(shí)的時(shí)間。因此,本課題開發(fā)和研究的意義在于能形象生動(dòng)的展示出 經(jīng)典密碼學(xué)中單碼、多碼以及多圖加密技術(shù)的加密和解密過程,有助于加強(qiáng)初學(xué)者對(duì)經(jīng)典密碼學(xué)的 理解。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 1 頁 共 45 頁 2

11、 仿射加密法 2.12.1 算法概述算法概述 經(jīng)典單碼加密法的一個(gè)形式稱為仿射加密法。在傳統(tǒng)仿射加密法中,字母表的字母被賦予一個(gè) 數(shù)字,仿射加密法的密鑰為 025 之間的數(shù)字對(duì)(m,n),m 與 26 的最大公約數(shù)必須為 1?,F(xiàn)在,假設(shè) p 為明文字母的數(shù)字(譯注:即該字母在字母表中對(duì)應(yīng)的數(shù)字),c 為密文字母的數(shù)字,m-1為 m 的 乘法的逆元,n-1為 n 的加法的逆元,那么,這兩個(gè)數(shù)字之間的關(guān)系可以用如下等式表示: 26 mod )(nmpc 26 mod )( 11 ncmp 由于傳統(tǒng)的仿射加密算法只對(duì) 26 個(gè)字母進(jìn)行加密,為了解決這一局限,對(duì)一般符號(hào)也能進(jìn)行 加密,從而采用 asc

12、ii 碼表作為加密參考,將模改為 95(注:ascii 碼值有 128 個(gè),由于前 33 個(gè) 為不可顯示字符,因此在加密的過程中排除,故將模改為 95)。因此,明文字母的數(shù)字 p 與密文 字母的數(shù)字 c 之間的關(guān)系可表示為: 95 mod )(nmpc 95 mod )( 11 ncmp 2.22.2 算法分析算法分析 仿射加密法與單碼加密替換沒有什么不同,因?yàn)槊魑牡拿總€(gè)字母分別只映射到一個(gè)密文字母。 例如,選取密鑰為(2,7)。(由于 2 與 95 的最大公約數(shù)為 1,即 gcd(2,95)=1,則 2 可以作為密鑰 中的 a)。因此,利用這個(gè)密鑰,字“tangyang”可以使用放射加密法加

13、密。將“tangyang”轉(zhuǎn)換 成數(shù)字 116、97、110、103、121、97、110、103,利用放射加密等式生成: c(t)=(2(116-32)+7)mod 95)+32=112,即為數(shù)字“p” c(a)=(2(97-32)+7)mod 95)+32=74,即為字母“j” c(n)=(2(110-32)+7)mod 95)+32=100,即為字母“d” c(g)=(2(103-32)+7)mod 95)+32=86,即為字母“v” c(y)=(2(121-32)+7)mod95)+32=122,即為字母“z” 注:由于 ascii 碼表中前 33 個(gè)為不可顯示字符,因此在加密運(yùn)算過程

14、中明文字母 p 要先減去 32(ascii 碼表中從 0 開始),求完模之后的結(jié)果再加上 32,這樣,對(duì)于(2,7)這個(gè)密鑰, “tangyang”加密后變成了“pjdvzjdv”。 計(jì)算可得(95i+1)/a=a-1,將“pjdvzjdv”轉(zhuǎn)換成數(shù)字 112、74、100、86、122、74、100、86 利用放射解密等式生成: c(p)=(48(112-32)-7)mod 95)+32=116,即為字母“t” c(j)=(48(74-32)-7)mod 95) +32=97,即為字母“a” c(d)=(48(100-32)-7)mod 95) +32=110,即為字母“n” c(v)=(4

15、8(86-32)-7)mod 95) +32=103,即為字母“g” c(z)=(48(122-32)-7)mod 95) +32=110,即為字母“y” 這樣,對(duì)于(2,7)這個(gè)密鑰,“pjdvzjdv”解密后變成了“tangyang” 2.32.3 核心代碼核心代碼 /加密函數(shù) cstring cfcpasswd:fcaddpass(cstring newtext,int a,int b) int n,i; char mida,c; n = newtext.getlength(); passwd = new charn; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 2 頁 共 45 頁 char *m_a

16、= newtext.getbuffer(newtext.getlength(); /將字符串轉(zhuǎn)換成字符數(shù)組 newtext.releasebuffer(newtext.getlength(); for (i = 0;i newtext.getlength();i+) mida = m_ai - 32; c = (a * mida + b) % 95; passwdi = c + 32; passwdi = 0; newtext.format(%s,passwd); return newtext; int cfcpasswd:getfa(int a) /求 a 逆 int i,n; for (i

17、 = 1; i 95;i+) n = 95 * i + 1; if (n % a) = 0) return n/a; return -1; cstring cfcpasswd:fcrelesspass(cstring oldtext,int a,int b) int n,i,m_b; char p,mida; int fa = getfa(a); if(fa = -1) return ; n = oldtext.getlength(); obvious = new charn; char *m_a = oldtext.getbuffer(oldtext.getlength(); oldtext

18、.releasebuffer(n); for(i = 0; i n;i+) mida = m_ai - 32; m_b = mida - b; while (m_b 0) m_b = m_b + 95; p = (fa * m_b) % 95; obviousi = p + 32; obviousi = 0; oldtext.format(%s,obvious); return oldtext; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 3 頁 共 45 頁 3 多文字加密法 3.13.1 算法概述算法概述 多文字加密法是另一種脆弱的單碼加密法,但是它與一般的單碼加密法又有一些不同。因?yàn)樗?是用一對(duì)字母來替代

19、每個(gè)明文字母,加密后的密文是明文的兩倍大。 多文字加密法的密鑰是一個(gè) 55 的矩陣。這個(gè)矩陣的 5 行和 5 列用含有 5 個(gè)字母的關(guān)鍵詞來 標(biāo)識(shí),該關(guān)鍵詞不能有重復(fù)的字母。字母表的每個(gè)字母填寫在這個(gè)矩陣中。當(dāng)然,矩陣只有 25 個(gè) 位置,而字母表有 26 個(gè)字母,因此字母“i”和“j”占同一個(gè)單元,這就意味著所有的“j”都變 成了“i”。 例如,如果關(guān)鍵詞為 takes,那么密鑰矩陣為: 表 3.1 密文、明文對(duì)照表 takes tabcde afghik klmnop eqrstu svwxyz 每個(gè)明文由標(biāo)識(shí)該字母的行和列的字母對(duì)替代,加密過程為查找標(biāo)識(shí)該字母的行和列的字母對(duì) 的過程。

20、解密過程則為反向查找矩陣的過程。 3.23.2 算法分析算法分析 在關(guān)鍵詞為 takes,明文為 tangyang 的情況下,加密解密過程如下: 加密過程: 密文“ee”替代了明文的“t”,密文“tt”替代了明文的“a”,以此類推,明文“tangyang” 加密后的密文為”ee tt kk aa se tt kk aa”。 明文“t”替代了密文的“ee”,明文“a”替代了密文的“tt”,以此類推,密文“ee tt kk aa se tt kk aa ”解密后的明文為“tangyang”。 3.33.3 核心代碼核心代碼 /加密函數(shù) cstring cmorewordpasswd:mwaddpa

21、ss(cstring newtext,cstring passkey) int textlen = newtext.getlength(); cstring result; int flag; /狀態(tài)標(biāo)志,1 表示明文字符在字母表范圍之內(nèi),0 表示不在范圍內(nèi) int i,j,k = 0,n = 0; passwd = new char2 * textlen; /密文數(shù)組 obvious = newtext.getbuffer(textlen); /明文數(shù)組 newtext.releasebuffer(textlen); char *chkey = passkey.getbuffer(passk

22、ey.getlength(); /密鑰數(shù)組 passkey.releasebuffer(passkey.getlength(); while(k textlen) flag = 0; for(i = 0; i 5; i+) for(j = 0; j 5; j+) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 4 頁 共 45 頁 char mid = obviousk; if (mid = j) mid = i; if (arraykeyij = mid) passwdn = chkeyi; passwdn+1 = chkeyj; n = n + 2; flag = 1; break; if (flag = 0)

23、 passwdn = obviousk; n+; k+; passwdn = 0; result.format(%s,passwd); return result; /解密函數(shù) cstring cmorewordpasswd:mwrelesspass(cstring oldtext,cstring passkey) int textlen = oldtext.getlength(); cstring result; int flag; int i,j,k = 0,n = 0; obvious = new chartextlen/2; passwd = oldtext.getbuffer(tex

24、tlen); oldtext.releasebuffer(textlen); char *chkey = passkey.getbuffer(passkey.getlength(); passkey.releasebuffer(passkey.getlength(); while(n textlen) flag = 0; for(i = 0;i 5;i+) if(passwdn = chkeyi) flag = 1; break; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 5 頁 共 45 頁 if(flag = 1) for(j = 0;j 5;j+) if(passwdn+1 = chkeyj) brea

25、k; if(flag = 0) obviousk = passwdn; k+; n+; if(flag = 1) obviousk = arraykeyij; k+; n = n + 2; obviousk = 0; result.format(%s,obvious); return result; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 6 頁 共 45 頁 4 vigenere 加密法 4.14.1 算法概述算法概述 vigenere 加密法不同于上面的兩種加密法,它是一個(gè)著名的多碼加密法。vigenere 加密法是 基于關(guān)鍵詞的加密系統(tǒng),但不是像單碼關(guān)鍵詞加法那樣使用關(guān)鍵詞來定義替換模式的。 vige

26、nere 加密法,關(guān)鍵詞寫在明文的上面,并且不斷重復(fù)書寫,這樣每個(gè)明文字母都與一個(gè) 關(guān)鍵詞的字母關(guān)聯(lián),例如,關(guān)鍵詞為“make”,而明文為“tangyang”的情況下,關(guān)聯(lián)詞-明文的 關(guān)聯(lián)如下所示: 表 4.1 密文、明文對(duì)照表 makemake t angyang 利用如圖 4.1 所示的 vigenere 表,這些字母對(duì)就可以用來確定明文字符的加密結(jié)果。用密鑰字母確 定表的行,而明文字母確定表的列,表中行列交叉處的字母就是用來替代明文字母的密文字母。 表 4.2 vigenere 表 abcdefghijklm n o p q rs tu v w x y z aabcdefghijklm

27、n o p q rs tu v w x y z bbcdefghijklm no p q rs tu v w x y z a ccdefghijklm nop q rstu v w x y z a b ddefghijklm nopq rstu v w x y z a b c eefghijklm nopqrstu v w x y z a b c d ffghijklm nopqrstu v w x y z a b c d e gghijklm nopqrstu vw x y z a b c d e f hhijklm nopqrstu vw xy z a b c d e fg iijklm

28、nopqrstuvw xy z a b c d e fg h jjklm nopqrstuvw xyza b c d e fg h i kklm nopqrstuvw xyza b c d e fg h ij llm nopqrstuvw xyza b c d e fg h ijk m m nopqrstuvw xyzab cd e fg h ijk l nnopqrstuvw xyzab cd e fg h ijk lm oopqrstuvw xyzab cd e fg h ijk lm n ppqrstuvw xyzabcd e fg h ijk lm n o qqrstuvw xyzab

29、cd efg h ijk lm n o p rrstuvw xyzabcdefgh ijk lm n o p q sstuvw xyzabcdefgh ijk lm n o p q r ttuvw xyzabcdefgh ijk lm n o p q r s uuvw xyzabcdefgh ijk lm n o p q r s t vvw xyzabcdefghijklm n o p q r s t u w w xyzabcdefghijklm n o p q r s t u v xxyzabcdefghijklm n o p q r s t u v w yyzabcdefghijklm n

30、 o p q rs t u v w x zzabcdefghijklm n o p q rs tu v w x y 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 7 頁 共 45 頁 4.2 算法分析算法分析 在關(guān)鍵詞為“make”,而明文為“tangyang”的情況下,關(guān)聯(lián)詞-明文的關(guān)聯(lián)如下: 表 4.3 明文、密文對(duì)照表 密鑰makemake 明文tangyang 加密過程:用密鑰字母確定表的行,而明文字母確定表的列,表中行列交叉處的字母就是用來 替代明文字母的密文。對(duì)照 vigenere 表查找密文分析結(jié)果如下: 大寫字母處理:首先將大寫字母轉(zhuǎn)換成小寫字母,找到其密文后再將其轉(zhuǎn)換成對(duì)應(yīng)的小寫字母。 在 vi

31、genere 表中查找“m”列和“t”行,找到結(jié)果密文字母“f”,重復(fù)這個(gè)過程,可以生成 以下的密文: 表 4.4 加密后的明文、密文對(duì)照表 密鑰makemake 明文tangyang 密文faxkkaxk 則明文“tangyang”在關(guān)鍵詞為“make”時(shí),密文為“faxkkaxk”。 解密過程:要破譯 vigenere 加密法,需要顛倒該查找過程。利用密鑰和密文對(duì),在 vigenere 中確定相應(yīng)的明文。要實(shí)現(xiàn)這些,找到由密鑰確定的行,掃描該行,直到找到密文字母,該密文字 母所在列的第一個(gè)字母就是明文字母。 例如將上述密文“faxkkaxk”解密。在 vigenere 表中查找“m”行中“

32、f”的位置所對(duì)列的第 一個(gè)字母,找到結(jié)果明文字母“t”,重復(fù)這個(gè)過程,則密文“faxhkaxh”解密后為“tangyang”。 4.34.3 核心代碼核心代碼 /加密函數(shù) void cvienerepasswd:getpasskey(cstring text,char *result,int len) /構(gòu)建與明文字符長(zhǎng)度相同 的密鑰數(shù)組 int n = len / text.getlength(); /text 為密鑰,result 返回的結(jié)果,len 明文長(zhǎng)度 int m = len % text.getlength(); char *strtext = text.getbuffer(te

33、xt.getlength(); text.releasebuffer(text.getlength(); strcpy(result,strtext); for (int i = 1; i n; i+) strcat(result,strtext); if (m = 0) return; else strcat(result,strtext); cstring cvienerepasswd:vigaddpass(cstring newtext,cstring passkey) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 8 頁 共 45 頁 int i = 26,j = 26,k; int flag = 0;

34、char chi,chj; cstring result; int textlen = newtext.getlength(); obvious = newtext.getbuffer(textlen); passwd = new chartextlen; newtext.releasebuffer(textlen); char *chpasskey = new chartextlen; getpasskey(passkey,chpasskey,textlen); for (k = 0; k 64 chj = obviousk + 32; else chj = obviousk; i = ge

35、tpassnum(chi); j = getpassnum(chj); if (j = 26 | i = 26) passwdk = obviousk; else if (flag = 1) passwdk = arraykeyij - 32; flag = 0; else passwdk = arraykeyij; passwdk = 0; result.format(%s,passwd); return result; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 9 頁 共 45 頁 int cvienerepasswd:getpassnum(char ch) for (int i = 0; i 26; i

36、+) if (arraynumi = ch) return i; return 26; /解密函數(shù) cstring cvienerepasswd:vigrelesspass(cstring oldtext,cstring passkey) int flag = 0; int i = 26, j = 26, k, t; char chi,chj; cstring result; int textlen = oldtext.getlength(); passwd = oldtext.getbuffer(textlen); obvious = new chartextlen; oldtext.rel

37、easebuffer(textlen); char *chpasskey = new chartextlen; getpasskey(passkey,chpasskey,textlen); for (k = 0; k 64 chj = passwdk + 32; else chj = passwdk; i = getpassnum(chi); for (t = 0; t 26; t+) if (arraykeyit = chj) break; if (t = 26) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 10 頁 共 45 頁 obviousk = passwdk; else if (flag = 1)

38、obviousk = arraynumt - 32; flag = 0; else obviousk = arraynumt; obviousk = 0; result.format(%s,obvious); return result; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 11 頁 共 45 頁 5 hill 加密法 5.15.1 算法概述算法概述 hill 加密法是經(jīng)典多圖加密法的一種,要成功使用多圖加密法,需要將數(shù)學(xué)方法應(yīng)用到密碼學(xué) 中去,hill 提出了一種基于聯(lián)立方程的加密算法。該加密算法將含有 m 個(gè)字母的明文塊加密成含有 m 個(gè)字母的密文塊。每個(gè)明文字母被賦予一個(gè)數(shù)值,通常是 a=0,b=

39、1,z=25,但 hill 使用的是隨 機(jī)賦值,塊中每個(gè)字母的數(shù)值一起用來生成一組新的數(shù)值,這些數(shù)值就用來表示密文字母。例如, 如果 m=3,那么 3 個(gè)明文字母的數(shù)值(假設(shè)為p1,p2和p3)將通過如下的方程組轉(zhuǎn)換成密文數(shù)值 c1,c2和 c3: 26mod)(c 3132121111 pkpkpk 26mod)(c 3232221212 pkpkpk 26mod)(c 3332321313 pkpkpk 該加密法的密鑰是 kij值,取模操作的意思是將和除以 26,得余數(shù)。 確定密鑰后將明文字母轉(zhuǎn)換成數(shù)字形式,帶入以上方程組,解方程組,得出密文的數(shù)值。再將 這些數(shù)值轉(zhuǎn)換回字母后,就得到其密文

40、。 由于傳統(tǒng)的 hill 加密算法只對(duì) 26 個(gè)字母進(jìn)行加密,為了解決這一局限,對(duì)常用符號(hào)也能進(jìn)行 加密,從而采用 ascii 碼表作為加密參考,將模改為 95(注:ascii 碼值有 128 個(gè),由于前 33 個(gè) 為不可顯示字符,因此在加密的過程中排除,故將模改為 95)。因此,上述關(guān)系方程組可表示為: 95mod)(c 3132121111 pkpkpk 95mod)(c 3232221212 pkpkpk 95mod)(c 3332321313 pkpkpk 最簡(jiǎn)單的方法是使用矩陣。加密密鑰是矩陣 m,則解密密鑰是 m-1。 要使這個(gè)過程可行,則密鑰矩陣必須是可逆的,因此密鑰值不可隨機(jī)選

41、取??梢杂脭?shù)學(xué)方法表 示 hill 加密的一般形式。密鑰寫成一個(gè) mm 的可逆矩陣形式: k = nmnn m kkk kkk k kk 21 22221 1m1211 將明文分成塊,每個(gè)塊含 m 個(gè)字母,用 m1 的向量表示。例如,第 i 塊含有字符 p1,p2, ,pm,寫成如下形式: bi = m p p . p 2 1 那么密文就由如下計(jì)算結(jié)果確定: = m c c . c 2 1 nmnn m kkk kkk k kk 21 22221 1m1211 m p p . p 2 1 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 12 頁 共 45 頁 5.25.2 算法分析算法分析 hill 加密法中,密鑰

42、矩陣越大,該加密法抗擊能力就越強(qiáng),即越不容易被破解。其破解過程 跟仿射加密法的破解過程類似,即用已知明文密文組建方程組,求解該方程組后,就可以找到其 密鑰矩陣。 例如,選取密鑰矩陣為 44 可逆矩陣, ,明文為“tang”。 411610 9485 10596 5968 k 首先,找到明文的 ascii 碼值:116、97、110、103,再給其減去 32(由于 ascii 碼表中前 33 個(gè)為不可顯示字符,因此在加密運(yùn)算過程中明文字母 pij要先減 32(ascii 碼表中從 0 開始), 求完模之后的結(jié)果再加上 32。將這些數(shù)值代入以上方程組得出密文的數(shù)值: c1=(8(116-32)+6

43、(97-32)+9(110-32)+5(103-32) mod 95)+32=61 c2=(6(116-32)+9(97-32)+5(110-32)+10(103-32) mod 95)+32=36 c3=(5(116-32)+8(97-32)+4(110-32)+9(103-32) mod 95)+32=118 c4=(10(116-32)+6(97-32)+11(110-32)+4(103-32) mod 95)+32=124 將這些值轉(zhuǎn)化回字母后,就是密文=$v|。 計(jì)算可得密鑰矩陣的逆矩陣 94652894 946892 144542 1742092 k 1 - 計(jì)算步驟與加密步驟相同

44、,將這些數(shù)值代入以上方程組得出明文的數(shù)值: c1=(92(61-32)+20(36-32)+74(118-32)+1(124-32) mod 95)+32=116 c2=(2(61-32)+54(36-32)+44(118-32)+1(124-32) mod 95)+32=97 c3=(2(61-32)+89(36-32)+6(118-32)+94(124-32) mod 95)+32=110 c4=(94(61-32)+28(36-32)+65(118-32)+94(124-32) mod 95)+32=103 將這些值轉(zhuǎn)化回字母后,就是明文“tang”。 5.35.3 核心代碼核心代碼 /

45、加密函數(shù) cstring chillpasswd:hilladdpass(cstring newtext) int i = 0,j = 0; int textlen = newtext.getlength(); int n = textlen/4; int less = textlen % 4; obvious = newtext.getbuffer(textlen); newtext.releasebuffer(textlen); passwd = new chartextlen; while(i n) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 13 頁 共 45 頁 passwdj = (arraykey

46、00 * (obviousj - 32) + arraykey01 * (obviousj+1 - 32) + arraykey02 * (obviousj+2 - 32) + arraykey03 * (obviousj+3 - 32) % 95 + 32; passwdj+1 = (arraykey10 * (obviousj - 32) + arraykey11 * (obviousj+1 - 32) + arraykey12 * (obviousj+2 - 32) + arraykey13 * (obviousj+3 - 32) % 95 + 32; passwdj+2 = (arra

47、ykey20 * (obviousj - 32) + arraykey21 * (obviousj+1 - 32) + arraykey22 * (obviousj+2 - 32) + arraykey23 * (obviousj+3 - 32) % 95 + 32; passwdj+3 = (arraykey30 * (obviousj - 32) + arraykey31 * (obviousj+1 - 32) + arraykey32 * (obviousj+2 - 32) + arraykey33 * (obviousj+3 - 32) % 95 + 32; j = j + 4; i+

48、; if (less = 1) passwdj = obviousj; if (less = 2) passwdj = obviousj; passwdj+1 = obviousj+1; if (less = 3) passwdj = obviousj; passwdj+1 = obviousj+1; passwdj+2 = obviousj+2; passwdtextlen = 0; cstring result; result.format(%s,passwd); return result; /解密函數(shù) cstring chillpasswd:hillrelesspass(cstring

49、 oldtext) int i = 0,j = 0; int textlen = oldtext.getlength(); int n = textlen/4; int less = textlen % 4; passwd = oldtext.getbuffer(textlen); oldtext.releasebuffer(textlen); obvious = new chartextlen; while(i n) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 14 頁 共 45 頁 obviousj = (arraynkey00 * (passwdj - 32) + arraynkey01 * (passw

50、dj+1 - 32) + arraynkey02 * (passwdj+2 - 32) + arraynkey03 * (passwdj+3 - 32) % 95 + 32; obviousj+1 = (arraynkey10 * (passwdj - 32) + arraynkey11 * (passwdj+1 - 32) + arraynkey12 * (passwdj+2 - 32) + arraynkey13 * (passwdj+3 - 32) % 95 + 32; obviousj+2 = (arraynkey20 * (passwdj - 32) + arraynkey21 *

51、(passwdj+1 - 32) + arraynkey22 * (passwdj+2 - 32) + arraynkey23 * (passwdj+3 - 32) % 95 + 32; obviousj+3 = (arraynkey30 * (passwdj - 32) + arraynkey31 * (passwdj+1 - 32) + arraynkey32 * (passwdj+2 - 32) + arraynkey33 * (passwdj+3 - 32) % 95 + 32; j = j + 4; i+; if (less = 1) obviousj = passwdj; if (

52、less = 2) obviousj = passwdj; obviousj+1 = passwdj+1; if (less = 3) obviousj = passwdj; obviousj+1 = passwdj+1; obviousj+2 = passwdj+2; obvioustextlen = 0; cstring result; result.format(%s,obvious); return result; void chillpasswd:setarray(int array4) int i, j; for (i = 0; i 4; i+) for (j = 0; j 4;

53、j+) arraykeyij = arrayij; 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 15 頁 共 45 頁 void chillpasswd:setnarray(int array4) int i, j; for (i = 0; i 4; i+) for (j = 0; j in c+ can be written self-. c+objective-c class foo int x; int y; void f(void); ; void foo:f(void) x = 1; int y; /making ambiguity with this-y y = 2; /using local y

54、this-y = 3; /disambiguating interface foo : nsobject int x; int y; -(void) f; end implementation foo -(void) f x = 1; int y; /making ambiguity with this-y y = 2; /using local y self-y = 3; /disambiguating end 3.3.4 prototyp e id and signature, overloading a function is a part of code that can be ref

55、erenced, for instance to use as function pointers, orfunctors. moreover, even if the name of the function is a good candidate for a unique id, onemust take care when using overloading. c+ and objective-c use opposite ways to differentiateprototypes. the first is based on parameters types, while the

56、second is based on parameter labels. in c+, two functions can have the same name as long as their parameters have different types. when using methods, the const option is also discriminative. c+ int f(int); int f(float); /ok, float is different from int class foo 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 28 頁 共 45 頁 public: int

57、 g(int); int g(float); /ok, float is different from int int g(float) const; /ok, const is discriminative ; class bar public: int g(int); /ok, we are in bar:, different from foo: in objective-c, all functions are c functions: they cannot be overloaded (unless the compilercan be told to use c99; like

58、gcc does). however, methods use a different syntax, and can bedifferentiated thanks to parameter labels. objective-c int f(int); int f(float); /error : c functions cannot be overloaded interface foo : nsobject -(int) g:(int) x; -(int) g:(float) x; /error : this method is not different / from the pre

59、vious one (no label) -(int) g:(int) x :(int) y; /ok : two anonymous labels -(int) g:(int) x :(float) y; /error : not different from the /previous one -(int) g:(int) x andy:(int) y; /ok : second label is andy -(int) g:(int) x andy:(float) y; /error : not different from the /previous one -(int) g:(int

60、) x andalsoy:(int) y; /ok : second label is /andalsoy, different from andy end the label-based identifying method is useful for expressing the exact “name” of the function, as stated below. interface foo : nsobject /the method name is g -(int) g; /the method name is g: -(int) g:(float) x; /the metho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論