




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、0 / 46 題 目 一款經(jīng)典加密解密教學(xué)演示軟件的開(kāi)發(fā) 學(xué)生 湯陽(yáng) 學(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 日0 / 46 本科畢業(yè)設(shè)計(jì)任務(wù)書(shū)院(系) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 專業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)(專升本 1301) 學(xué)生 湯陽(yáng) 一、畢業(yè)設(shè)計(jì)題目一款經(jīng)典加密解密教學(xué)演示軟件的開(kāi)發(fā)二、畢業(yè)設(shè)計(jì)工作自 2014 年 12 月 9 日 起至 2015 年 6 月 20 日止三、畢業(yè)設(shè)計(jì)進(jìn)行地點(diǎn): 陜西理工學(xué)院 四、畢業(yè)設(shè)計(jì)應(yīng)完成容與相關(guān)要求:?jiǎn)未a、多碼以與多
2、圖加密技術(shù)在經(jīng)典密碼學(xué)中占據(jù)著與其重要的地位,也是現(xiàn)代密碼學(xué)的基礎(chǔ)。要求設(shè)計(jì)一個(gè)演示軟件,在該軟件中能夠用經(jīng)典密碼密碼學(xué)中的幾個(gè)典型的加密解密算法對(duì)文本進(jìn)行加密與解密。要現(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é)演示軟件開(kāi)發(fā)的案例與相關(guān)經(jīng)驗(yàn)。六、畢業(yè)設(shè)計(jì)的進(jìn)度安排:至 2015-3-20 搜集文獻(xiàn)材料,撰寫(xiě)開(kāi)題報(bào)告2015-3-20 至 2015-3-31 進(jìn)行設(shè)計(jì)分析,確定設(shè)計(jì)方案2015-4-01 至 2015-4-15 概要設(shè)計(jì),
3、構(gòu)思設(shè)計(jì)平臺(tái)的整體框架2015-4-16 至 2015-5-15 詳細(xì)設(shè)計(jì)、搭建平臺(tái),編寫(xiě)代碼2015-5-15 至 2015-5-25 軟件測(cè)試、系統(tǒng)完善2015-5-26 至 2015-6-05 撰寫(xiě)畢業(yè)設(shè)計(jì)說(shuō)明書(shū)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)日期0 / 46一款經(jīng)典加密解密教學(xué)演示軟件的開(kāi)發(fā)一款經(jīng)典加密解密教學(xué)演示軟件的開(kāi)發(fā)湯陽(yáng)(陜西理工學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)計(jì)專升本 1301 班,陜西 723000)指導(dǎo)教師: 軍摘要為了在密碼學(xué)教
4、學(xué)過(guò)程中形象的展示加密解密這一過(guò)程,設(shè)計(jì)實(shí)現(xiàn)了一款經(jīng)典加密解密教學(xué)演示軟件。該軟件基于 Microsoft Visual C+ 6.0 集成開(kāi)發(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 加密法0 / 46TheThe DevelopmentDevelopment ofof AClassicalAClassical EncryptionEncryption An
5、dDecryptionAndDecryption DemoDemo SoftwareSoftware ForFor TeachingTeachingTangYang(Grade 13, UpgradedClass 1, Major Computer Science and Technology, School of Mathematics and Computer Science .Shaanxi University of Technology, Hanzhong 723000, Shaanxi)Tutor: LI JunAbstract:Abstract:In order to showt
6、he 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, implem
7、entation of the affine encryption method, multiple text encryption method, Vigenere encryption method and Hill encryption method in Microsoft Visual C+ 6.0.KeyKey words:words:Affine method; More text method; Vigenere method; Hill method1 / 46目錄1 課題實(shí)施的背景12 仿射加密法22.1 算法概述 22.2 算法分析 22.3 核心代碼 23 多文字加密法
8、43.1 算法概述 43.2 算法分析 43.3 核心代碼 44 VIGENERE 加密法74.1 算法概述 74.2 算法分析 84.3 核心代碼 85 HILL 加密法125.1 算法概述 125.2 算法分析 135.3 核心代碼 136 系統(tǒng)測(cè)試176.1 仿射加密算法測(cè)試 176.2 多文字加密算法測(cè)試 176.3 VIGENERE加密算法測(cè)試 196.4 HILL加密算法測(cè)試 19總 結(jié)21致 22參考文獻(xiàn)23科技外文文獻(xiàn)24附錄 A: 系統(tǒng)使用說(shuō)明書(shū)450 / 461 課題實(shí)施的背景隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,大量的數(shù)據(jù)需要在網(wǎng)絡(luò)上進(jìn)行傳輸,因此,信息安全受到了越來(lái)越廣泛的關(guān)注。近年來(lái),
9、我國(guó)數(shù)據(jù)竊取事件層出不窮,CSDN、珍愛(ài)網(wǎng)、世紀(jì)佳緣、走秀等多家的用戶數(shù)據(jù)庫(kù)被曝光在網(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 萬(wàn)2300 萬(wàn)之多。天貓商城、支付寶和當(dāng)當(dāng)網(wǎng)也已被卷入其中。事實(shí)上,選擇一種合適的加密機(jī)制將能消除消費(fèi)者的各種信息安全隱患。從古典密碼學(xué)的研究到現(xiàn)代密碼學(xué)的發(fā)展,密碼學(xué)在我們生活中扮演著越來(lái)越重要的角色。但由于密碼學(xué)是神秘而富有冒險(xiǎn)色彩的,它
10、不僅僅是計(jì)算機(jī)科學(xué)的容,因此,學(xué)習(xí)密碼學(xué)必須具有寬廣的知識(shí)背景。加之,密碼學(xué)是一個(gè)很抽象的東西,不容易理解,所以,學(xué)習(xí)經(jīng)典密碼學(xué)對(duì)于初學(xué)者來(lái)說(shuō)具有一定的困難與挑戰(zhàn),如果有一套介紹加密解密算法的軟件將抽象轉(zhuǎn)換為形象,這勢(shì)必要減少大量學(xué)習(xí)理解密碼學(xué)知識(shí)的時(shí)間。因此,本課題開(kāi)發(fā)和研究的意義在于能形象生動(dòng)的展示出經(jīng)典密碼學(xué)中單碼、多碼以與多圖加密技術(shù)的加密和解密過(guò)程,有助于加強(qiáng)初學(xué)者對(duì)經(jīng)典密碼學(xué)的理解。2 仿射加密法2.12.1 算法概述算法概述經(jīng)典單碼加密法的一個(gè)形式稱為仿射加密法。在傳統(tǒng)仿射加密法中,字母表的字母被賦予一個(gè)數(shù)字,仿射加密法的密鑰為 025 之間的數(shù)字對(duì)(m,n),m 與 26 的最
11、大公約數(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 )(nmpc26 mod )(11ncmp由于傳統(tǒng)的仿射加密算法只對(duì) 26 個(gè)字母進(jìn)行加密,為了解決這一局限,對(duì)一般符號(hào)也能進(jìn)行加密,從而采用 ASCII 碼表作為加密參考,將模改為 95(注:ASCII 碼值有 128 個(gè),由于前 33 個(gè)為不可顯示字符,因此在加密的過(guò)程中排除,故將模改為 95)。因此,明文字母的數(shù)字 p 與密文字母的數(shù)字 c 之間的關(guān)系可表示為:9
12、5 mod )(nmpc95 mod )(11ncmp2.22.2 算法分析算法分析仿射加密法與單碼加密替換沒(méi)有什么不同,因?yàn)槊魑牡拿總€(gè)字母分別只映射到一個(gè)密文字母。例如,選取密鑰為(2,7)。(由于 2 與 95 的最大公約數(shù)為 1,即 GCD(2,95)=1,則 2 可以作為密鑰中的 a)。因此,利用這個(gè)密鑰,字“tangyang”可以使用放射加密法加密。將“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
13、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)算過(guò)程中明文字母 p 要先減去32(ASCII 碼表中從 0 開(kāi)始),求完模之后的結(jié)果再加上 32,這樣,對(duì)于(2,7)這個(gè)密鑰,“tangyang”加密后變成了“pJdvzJdv”。計(jì)算可得(95i+1)/a=a-1,將“pJdvzJdv”轉(zhuǎn)換成數(shù)字 11
14、2、74、100、86、122、74、100、861 / 46利用放射解密等式生成: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)=(48(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 核心
15、代碼核心代碼/加密函數(shù)CString CFCpasswd:FCAddPass(CString newText,int a,int b)int N,i;char mida,c;N = newText.GetLength();Passwd = new charN;char *m_a = newText.GetBuffer(newText.GetLength(); /將字符串轉(zhuǎn)換成字符數(shù)組newText.ReleaseBuffer(newText.GetLength();for (i = 0;i newText.GetLength();i+)mida = m_ai - 32;c = (a * mid
16、a + b) % 95;Passwdi = c + 32;Passwdi = 0;newText.Format(%s,Passwd);return newText;int CFCpasswd:getFa(int a) /求 a 逆int i,n;for (i = 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
17、 = -1) return ;N = oldText.GetLength();obvious = new charN;2 / 46char *m_a = oldText.GetBuffer(oldText.GetLength();oldText.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);retu
18、rn oldText;3 多文字加密法3.13.1 算法概述算法概述多文字加密法是另一種脆弱的單碼加密法,但是它與一般的單碼加密法又有一些不同。因?yàn)樗怯靡粚?duì)字母來(lái)替代每個(gè)明文字母,加密后的密文是明文的兩倍大。多文字加密法的密鑰是一個(gè) 55 的矩陣。這個(gè)矩陣的 5 行和 5 列用含有 5 個(gè)字母的關(guān)鍵詞來(lái)標(biāo)識(shí),該關(guān)鍵詞不能有重復(fù)的字母。字母表的每個(gè)字母填寫(xiě)在這個(gè)矩陣中。當(dāng)然,矩陣只有 25 個(gè)位置,而字母表有 26 個(gè)字母,因此字母“i”和“j”占同一個(gè)單元,這就意味著所有的“j”都變成了“i”。例如,如果關(guān)鍵詞為 takes,那么密鑰矩陣為:表 3.1 密文、明文對(duì)照表takestabcde
19、afghikklmnopeqrstusvwxyz每個(gè)明文由標(biāo)識(shí)該字母的行和列的字母對(duì)替代,加密過(guò)程為查找標(biāo)識(shí)該字母的行和列的字母對(duì)的過(guò)程。解密過(guò)程則為反向查找矩陣的過(guò)程。3.23.2 算法分析算法分析在關(guān)鍵詞為 takes,明文為 tangyang 的情況下,加密解密過(guò)程如下:加密過(guò)程:密文“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 ”解密后的明文為“t
20、angyang”。3.33.3 核心代碼核心代碼/加密函數(shù)CString CMoreWordPasswd:MWAddPass(CString newText,CString passKey)3 / 46int textLen = newText.GetLength();CString result;int flag; /狀態(tài)標(biāo)志,1 表示明文字符在字母表圍之,0 表示不在圍int i,j,k = 0,n = 0;Passwd = new char2 * textLen; /密文數(shù)組obvious = newText.GetBuffer(textLen); /明文數(shù)組newText.Releas
21、eBuffer(textLen);char *chKey = passKey.GetBuffer(passKey.GetLength(); /密鑰數(shù)組passKey.ReleaseBuffer(passKey.GetLength();while(k textLen)flag = 0;for(i = 0; i 5; i+)for(j = 0; j 5; j+)char mid = obviousk;if (mid = j)mid = i;if (ArrayKeyij = mid)Passwdn = chKeyi;Passwdn+1 = chKeyj;n = n + 2;flag = 1;brea
22、k;if (flag = 0)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;4 / 46int flag;int i,j,k = 0,n = 0;obvious = new chartextLen/2;Passwd = oldText.GetBuf
23、fer(textLen);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;if(flag = 1)for(j = 0;j 5;j+)if(Passwdn+1 = chKeyj)break;if(flag = 0)obviousk = Passw
24、dn;k+;n+;if(flag = 1)obviousk = ArrayKeyij;k+;n = n + 2;obviousk = 0;result.Format(%s,obvious);return result;4 Vigenere 加密法4.14.1 算法概述算法概述Vigenere 加密法不同于上面的兩種加密法,它是一個(gè)著名的多碼加密法。Vigenere 加密法是5 / 46基于關(guān)鍵詞的加密系統(tǒng),但不是像單碼關(guān)鍵詞加法那樣使用關(guān)鍵詞來(lái)定義替換模式的。Vigenere 加密法,關(guān)鍵詞寫(xiě)在明文的上面,并且不斷重復(fù)書(shū)寫(xiě),這樣每個(gè)明文字母都與一個(gè)關(guān)鍵詞的字母關(guān)聯(lián),例如,關(guān)鍵詞為“make”,
25、而明文為“tangyang”的情況下,關(guān)聯(lián)詞-明文的關(guān)聯(lián)如下所示:表 4.1 密文、明文對(duì)照表makemaket angyang利用如圖 4.1 所示的 Vigenere 表,這些字母對(duì)就可以用來(lái)確定明文字符的加密結(jié)果。用密鑰字母確定表的行,而明文字母確定表的列,表中行列交叉處的字母就是用來(lái)替代明文字母的密文字母。表 4.2vigenere 表abcdefghijklmnop q r s t u v w x y zaabcdefghijklmnop q r s t u v w x y zbbcdefghijklmnopq r s t u v w x y z accdefghijklmnopqr
26、 s t u v w x y z a bddefghijklmnopqrs t u v w x y z a b ceefghijklmnopqrst u v w x y z a b c dffghijklmnopqrstu v w x y z a b c d egghijklmnopqrstuv w x y z a b c d e fhhijklmnopqrstuvw x y z a b c d e f giijklmnopqrstuvwx y z a b c d e f g hjjklmnopqrstuvwxy z a b c d e f g h ikklmnopqrstuvwxyz a b
27、 c d e f g h i jllmnopqrstuvwxyza b c d e f g h i j kmmnopqrstuvwxyzab c d e f g h i j k lnnopqrstuvwxyzabc d e f g h i j k l moopqrstuvwxyzabcd e f g h i j k l m nppqrstuvwxyzabcde f g h i j k l m n oqqrstuvwxyzabcdef g h i j k l m n o prrstuvwxyzabcdefg h i j k l m n o p qsstuvwxyzabcdefgh i j k l
28、 m n o p q rttuvwxyzabcdefghi j k l m n o p q r suuvwxyzabcdefghij k l m n o p q r s tvvwxyzabcdefghijk l m n o p q r s t uwwxyzabcdefghijkl m n o p q r s t u vxxyzabcdefghijklm n o p q r s t u v wyyzabcdefghijklmn o p q r s t u v w xzzabcdefghijklmno p q r s t u v w x y4.24.2 算法分析算法分析在關(guān)鍵詞為“make”,而明
29、文為“tangyang”的情況下,關(guān)聯(lián)詞-明文的關(guān)聯(lián)如下:表 4.3 明文、密文對(duì)照表密鑰makemake明文tangyang6 / 46加密過(guò)程:用密鑰字母確定表的行,而明文字母確定表的列,表中行列交叉處的字母就是用來(lái)替代明文字母的密文。對(duì)照 Vigenere 表查找密文分析結(jié)果如下:大寫(xiě)字母處理:首先將大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,找到其密文后再將其轉(zhuǎn)換成對(duì)應(yīng)的小寫(xiě)字母。在 Vigenere 表中查找“m”列和“t”行,找到結(jié)果密文字母“f”,重復(fù)這個(gè)過(guò)程,可以生成以下的密文:表 4.4 加密后的明文、密文對(duì)照表密鑰makemake明文tangyang密文faxkkaxk則明文“tangyang
30、”在關(guān)鍵詞為“make”時(shí),密文為“faxkkaxk”。解密過(guò)程:要破譯 Vigenere 加密法,需要顛倒該查找過(guò)程。利用密鑰和密文對(duì),在 Vigenere中確定相應(yīng)的明文。要實(shí)現(xiàn)這些,找到由密鑰確定的行,掃描該行,直到找到密文字母,該密文字母所在列的第一個(gè)字母就是明文字母。例如將上述密文“faxkkaxk”解密。在 Vigenere 表中查找“m”行中“f”的位置所對(duì)列的第一個(gè)字母,找到結(jié)果明文字母“t”,重復(fù)這個(gè)過(guò)程,則密文“faxhkaxh”解密后為“tangyang”。4.34.3 核心代碼核心代碼/加密函數(shù)void CVienerePasswd:getPassKey(CString
31、 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(text.GetLength();text.ReleaseBuffer(text.GetLength();strcpy(result,strText);for (int i = 1; i N; i+)strcat(result,strText);if (M =
32、 0) return;elsestrcat(result,strText);CString CVienerePasswd:VIGAddPass(CString newText,CString passKey)int i = 26,j = 26,k;int flag = 0;char chi,chj;CString result;int textLen = newText.GetLength();7 / 46obvious = newText.GetBuffer(textLen);Passwd = new chartextLen;newText.ReleaseBuffer(textLen);ch
33、ar *chPassKey = new chartextLen;getPassKey(passKey,chPassKey,textLen);for (k = 0; k 64 & chPassKeyk 64 & obviousk 91)flag = 1;chj = obviousk + 32;elsechj = obviousk;i = getPassNum(chi);j = getPassNum(chj);if (j = 26 | i = 26)Passwdk = obviousk;elseif (flag = 1)Passwdk = ArrayKeyij - 32;flag = 0;else
34、Passwdk = ArrayKeyij;Passwdk = 0;result.Format(%s,Passwd);return result;int CVienerePasswd:getPassNum(char ch)for (int i = 0; i 26; i+)if (ArrayNumi = ch)8 / 46return i;return 26;/解密函數(shù)CString CVienerePasswd:VIGRelessPass(CString oldText,CString passKey)int flag = 0;int i = 26, j = 26, k, t;char chi,
35、chj;CString result;int textLen = oldText.GetLength();Passwd = oldText.GetBuffer(textLen);obvious = new chartextLen;oldText.ReleaseBuffer(textLen);char *chPassKey = new chartextLen;getPassKey(passKey,chPassKey,textLen);for (k = 0; k 64 & chPassKeyk 64 & Passwdk 91)flag = 1;chj = Passwdk + 32;elsechj
36、= Passwdk;i = getPassNum(chi);for (t = 0; t 26; t+)if (ArrayKeyit = chj)break;if (t = 26)obviousk = Passwdk;elseif (flag = 1)9 / 46obviousk = ArrayNumt - 32;flag = 0;elseobviousk = ArrayNumt;obviousk = 0;result.Format(%s,obvious);return result;5 Hill 加密法5.15.1 算法概述算法概述Hill 加密法是經(jīng)典多圖加密法的一種,要成功使用多圖加密法,
37、需要將數(shù)學(xué)方法應(yīng)用到密碼學(xué)中去,Hill 提出了一種基于聯(lián)立方程的加密算法。該加密算法將含有 m 個(gè)字母的明文塊加密成含有 m 個(gè)字母的密文塊。每個(gè)明文字母被賦予一個(gè)數(shù)值,通常是 a=0,b=1,z=25,但 Hill 使用的是隨機(jī)賦值,塊中每個(gè)字母的數(shù)值一起用來(lái)生成一組新的數(shù)值,這些數(shù)值就用來(lái)表示密文字母。例如,如果 m=3,那么 3 個(gè)明文字母的數(shù)值(假設(shè)為p1,p2和p3)將通過(guò)如下的方程組轉(zhuǎn)換成密文數(shù)值c1,c2和 c3:26mod)(c3132121111pkpkpk26mod)(c3232221212pkpkpk26mod)(c3332321313pkpkpk該加密法的密鑰是 ki
38、j值,取模操作的意思是將和除以 26,得余數(shù)。確定密鑰后將明文字母轉(zhuǎn)換成數(shù)字形式,帶入以上方程組,解方程組,得出密文的數(shù)值。再將這些數(shù)值轉(zhuǎn)換回字母后,就得到其密文。由于傳統(tǒng)的 Hill 加密算法只對(duì) 26 個(gè)字母進(jìn)行加密,為了解決這一局限,對(duì)常用符號(hào)也能進(jìn)行加密,從而采用 ASCII 碼表作為加密參考,將模改為 95(注:ASCII 碼值有 128 個(gè),由于前 33 個(gè)為不可顯示字符,因此在加密的過(guò)程中排除,故將模改為 95)。因此,上述關(guān)系方程組可表示為:95mod)(c3132121111pkpkpk95mod)(c3232221212pkpkpk95mod)(c3332321313pkp
39、kpk最簡(jiǎn)單的方法是使用矩陣。加密密鑰是矩陣 M,則解密密鑰是 M-1。要使這個(gè)過(guò)程可行,則密鑰矩陣必須是可逆的,因此密鑰值不可隨機(jī)選取??梢杂脭?shù)學(xué)方法表示 Hill 加密的一般形式。密鑰寫(xiě)成一個(gè) mm 的可逆矩陣形式:K =nmnnmkkkkkkkkk21222211m1211將明文分成塊,每個(gè)塊含 m 個(gè)字母,用 m1 的向量表示。例如,第 i 塊含有字符p1,p2,pm,寫(xiě)成如下形式:10 / 46bi =mpp.p21那么密文就由如下計(jì)算結(jié)果確定:=mcc.c21nmnnmkkkkkkkkk21222211m1211mpp.p215.25.2 算法分析算法分析Hill 加密法中,密鑰矩
40、陣越大,該加密法抗擊能力就越強(qiáng),即越不容易被破解。其破解過(guò)程跟仿射加密法的破解過(guò)程類似,即用已知明文密文組建方程組,求解該方程組后,就可以找到其密鑰矩陣。例如,選取密鑰矩陣為 44 可逆矩陣, ,明文為“tang”。4116109485105965968k首先,找到明文的 ASCII 碼值:116、97、110、103,再給其減去 32(由于 ASCII 碼表中前 33個(gè)為不可顯示字符,因此在加密運(yùn)算過(guò)程中明文字母 pij要先減 32(ASCII 碼表中從 0 開(kāi)始),求完模之后的結(jié)果再加上 32。將這些數(shù)值代入以上方程組得出密文的數(shù)值:c1=(8(116-32)+6(97-32)+9(110
41、-32)+5(103-32) mod 95)+32=61 c2=(6(116-32)+9(97-32)+5(110-32)+10(103-32) mod 95)+32=36c3=(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ì)算可得密鑰矩陣的逆矩陣946528949468921445421742092k1 - 計(jì)算步驟與加密步驟一樣,將這些數(shù)值代入以上方程組得出明文的數(shù)值:
42、c1=(92(61-32)+20(36-32)+74(118-32)+1(124-32) mod 95)+32=116c2=(2(61-32)+54(36-32)+44(118-32)+1(124-32) mod 95)+32=97c3=(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”。11 / 465.35.3 核心代碼核心代碼/加密函數(shù)CString CHillPas
43、swd: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)Passwdj = (ArrayKey00 * (obviousj - 32) + ArrayKey01 * (obviousj+1 - 32) +
44、 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 = (ArrayKey20 * (obviousj - 32) + ArrayKey21 * (obviousj+1 - 32)
45、 + 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+;if (less = 1)Passwdj = obviousj;if (less = 2)Passwdj = obvi
46、ousj;Passwdj+1 = obviousj+1;if (less = 3)Passwdj = obviousj;Passwdj+1 = obviousj+1;Passwdj+2 = obviousj+2;12 / 46PasswdtextLen = 0;CString result;result.Format(%s,Passwd);return result;/解密函數(shù)CString CHillPasswd:HillRelessPass(CString oldText)int i = 0,j = 0;int textLen = oldText.GetLength();int N = t
47、extLen/4;int less = textLen % 4;Passwd = oldText.GetBuffer(textLen);oldText.ReleaseBuffer(textLen);obvious = new chartextLen;while(i N)obviousj = (ArrayNKey00 * (Passwdj - 32) + ArrayNKey01 * (Passwdj+1 - 32) + ArrayNKey02 * (Passwdj+2 - 32) + ArrayNKey03 * (Passwdj+3 - 32) % 95 + 32;obviousj+1 = (A
48、rrayNKey10 * (Passwdj - 32) + ArrayNKey11 * (Passwdj+1 - 32) + ArrayNKey12 * (Passwdj+2 - 32) + ArrayNKey13 * (Passwdj+3 - 32) % 95 + 32;obviousj+2 = (ArrayNKey20 * (Passwdj - 32) + ArrayNKey21 * (Passwdj+1 - 32) + ArrayNKey22 * (Passwdj+2 - 32) + ArrayNKey23 * (Passwdj+3 - 32) % 95 + 32;obviousj+3
49、= (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 (less = 2)obviousj = Passwdj;obviousj+1 = Passwdj+1;13 / 46if (less = 3)obviousj = Passwdj;obviousj+1 = Passwdj
50、+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; j+)ArrayKeyij = arrayij;void CHillPasswd:setNArray(int array4)int i, j;for (i = 0; i 4; i+)for (j = 0; j in C+ can be
51、 written self-.C+Objective-C24 / 46class Fooint x;int y;void f(void);void Foo:f(void)x = 1;int y; /making ambiguity with this-yy = 2; /using local ythis-y = 3; /disambiguatinginterface Foo : NSObjectint x;int y;-(void) f;endimplementation Foo-(void) fx = 1;int y; /making ambiguity with this-yy = 2;
52、/using local yself-y = 3; /disambiguatingend.4 PrototypPrototyp e e idid andand signature,signature, overloadingoverloadingA function is a part of code that can be referenced, for instance to use as function pointers, orfunctors. Moreover, even if the name of the function is a good candidate
53、 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 second is based on parameter labels.In C+, two functions can have the same name as long as their parameters have different ty
54、pes.When using methods, the const option is also discriminative.C+int f(int);int f(float); /OK, float is different from intclass Foopublic:int g(int);int g(float); /OK, float is different from intint g(float) const; /OK, const is discriminative;class Barpublic:int g(int); /OK, we are in Bar:, differ
55、ent from Foo:InIn Objective-C,Objective-C, all functions are C functions: they cannot be overloaded (unless 25 / 46the compilercan be told to use C99; like gcc does). However, methods use a different syntax, and can bedifferentiated thanks to parameter labels.Objective-Cint f(int);int f(float); /Err
56、or : C functions cannot be overloadedinterface Foo : NSObject-(int) g:(int) x;-(int) g:(float) x; /Error : this method is not different/ from the previous 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
57、) 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) x andAlsoY:(int) y; /OK : second label is/andAlsoY, different from andYendThe label-based identifying method is useful for expressing the exact “name” of th
58、e function,Asstated erface Foo : NSObject /The method name is g-(int) g;/The method name is g:-(int) g:(float) x;/The method name is g:-(int) g:(float) x :(float) y;/The method name is g:andY:-(int) g:(float) x andY:(float) y;/The method name is g:andZ:-(int) g:(float) x andZ:(float) zendCl
59、early, two Objective-C methods are differentiated by labels instead of types. This is a way toreplace “pointers on member functions”, expressed by selectors, as explained in section 3.3.5 onthe current page..5 PointerPointer toto membermember function:function: SelectorSelectorIn Objective-C
60、, the methods have a particular syntax using parentheses and labels. It is notpossible to declare functions with this syntax. The notion of pointer to functions is the same in Cand Objective-C. It is only for pointers on methods where a difference occurs.26 / 46InIn C+,C+, the syntax is hard but con
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢塑料買賣合同協(xié)議書(shū)
- 扶貧小水電開(kāi)發(fā)協(xié)議書(shū)
- 聘請(qǐng)幫廚協(xié)議書(shū)
- 畢業(yè)生拒簽三方協(xié)議書(shū)
- 園林養(yǎng)護(hù)及保潔協(xié)議書(shū)
- 花木認(rèn)購(gòu)協(xié)議書(shū)
- 混凝土承包合同協(xié)議書(shū)
- 合伙開(kāi)食品工廠協(xié)議書(shū)
- 服裝店合同轉(zhuǎn)讓協(xié)議書(shū)
- 彩鋼瓦板房合同協(xié)議書(shū)
- 加氣站安全檢查管理規(guī)定
- 第24屆世界奧林匹克數(shù)學(xué)競(jìng)賽WMO省級(jí)測(cè)評(píng)三年級(jí)試卷【含答案】
- 急性髓系白血病小講課
- 財(cái)務(wù)管理制度的內(nèi)部準(zhǔn)則與行為規(guī)范
- 夜場(chǎng)醫(yī)美行業(yè)分析
- 科技想要什么
- 地下車庫(kù)照明改造方案
- 醫(yī)療試劑運(yùn)輸方案
- 第四次教育革命:人工智能如何改變教育
- 工程造價(jià)咨詢服務(wù)方案(技術(shù)方案)
- 《現(xiàn)代控制理論》(劉豹-唐萬(wàn)生)
評(píng)論
0/150
提交評(píng)論