【正文】
26m o d)(c 3332321313 pkpkpk ??? 該加密法的密鑰是 kij值,取模操作的意思是將和除以 26,得余數(shù)。 return result。 } else obvious[k] = ArrayNum[t]。 t++) { if (ArrayKey[i][t] == chj) break。 } else chj = Passwd[k]。 if (Passwd[k] 64 amp。 k++) { if (chPassKey[k] 64 amp。 char *chPassKey = new char[textLen]。 int textLen = ()。 } //解密函數(shù) CString CVienerePasswd::VIGRelessPass(CString oldText,CString passKey) { int flag = 0。 } int CVienerePasswd::getPassNum(char ch) 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 10 頁 共 45 頁 { for (int i = 0。 } } Passwd[k] = 39。 if (j == 26 || i == 26) { Passwd[k] = obvious[k]。 chj = obvious[k] + 32。 //大寫字母轉(zhuǎn)換為小寫字母 } else chi = chPassKey[k]。 k textLen。 (textLen)。 CString result。 else { strcat(result,strText)。 for (int i = 1。 //text 為密鑰, result 返回的結(jié)果, len 明文長度 int M = len % ()。要實(shí)現(xiàn)這些 ,找到由密鑰確定的行,掃描該行,直到找到密文字母,該密文字母所在列的第一個(gè)字母就是明文字母。對照 Vigenere 表查找密文分析結(jié)果如下: 大寫字母處理:首先將大寫字母轉(zhuǎn)換成小寫字母,找到其密 文后再將其轉(zhuǎn)換成對應(yīng)的小寫字母。 Vigenere 加密法是基于關(guān)鍵詞的加密系統(tǒng),但不是像單碼關(guān)鍵詞加法那樣使用關(guān)鍵詞來定義替換模式的。\039。 } if(flag == 1) { obvious[k] = ArrayKey[i][j]。j++) { if(Passwd[n+1] == chKey[j]) break。i++) { if(Passwd[n] == chKey[i]) { flag = 1。 (())。 obvious = new char[textLen/2]。 } //解密函數(shù) CString CMoreWordPasswd::MWRelessPass(CString oldText,CString passKey) { int textLen = ()。 } Passwd[n] = 39。 break。 if (ArrayKey[i][j] == mid) { Passwd[n] = chKey[i]。 if (mid == 39。 i 5。 char *chKey = (())。 //狀態(tài)標(biāo)志, 1 表示明文字符在字母表范圍之內(nèi), 0 表示不在范圍內(nèi) int i,j,k = 0,n = 0。 明文“ t”替代了密文的“ ee”,明文“ a”替代了密文的“ tt”,以此類推,密文“ ee tt kk aa se tt kk aa ”解密后的明文為“ tangyang”。當(dāng)然,矩陣只有 25 個(gè)位置,而字母表有 26 個(gè)字母,因此字母“ i”和“ j”占同一個(gè)單元,這就意味著所有的“ j”都變成了“ i”。因?yàn)樗怯靡粚ψ帜竵硖娲總€(gè)明文字母,加密后的密文是明文的兩倍大。\039。 while (m_b 0) m_b = m_b + 95。 for(i = 0。 N = ()。 } CString CFCpasswd::FCRelessPass(CString oldText,int a,int b) { int N,i,m_b。 i 95。 (%s,Passwd)。 c = (a * mida + b) % 95。 //將字符串轉(zhuǎn)換成字符數(shù)組 (())。 char mida,c。(由于 2 與 95 的最大公約數(shù)為 1,即 GCD(2,95)=1,則 2 可以作為密鑰中的 a)。在傳統(tǒng)仿射加密法中,字母表的字母被賦予一個(gè)數(shù)字,仿射加密法的密鑰為 0~25 之間的數(shù)字對 (m,n), m 與 26 的最大公約數(shù)必須為 1。 但由于密碼學(xué)是神秘而富有冒險(xiǎn)色彩的,它不 僅僅 是計(jì)算機(jī)科學(xué)的內(nèi)容,因此,學(xué)習(xí)密碼學(xué)必須具有寬廣的知識背景。繼 CSDN、 天涯社區(qū)用戶數(shù)據(jù)泄露后,互聯(lián)網(wǎng)行業(yè)一片人心惶惶,而在用戶數(shù)據(jù)最為重要的電商領(lǐng)域,也不斷傳出 用戶信息 漏洞,漏洞報(bào)告平臺烏云發(fā)布漏洞報(bào)告稱,支付 寶用戶大量泄露,被用于網(wǎng)絡(luò)營銷,泄露總量達(dá) 1200 萬~ 2300 萬之多。 More text method。要求實(shí)現(xiàn)的功能: 實(shí)現(xiàn)仿射加密與解密 實(shí)現(xiàn)多文字加密與解密 實(shí)現(xiàn) Vigenere 密與解密 實(shí)現(xiàn) Hill 加密與解密 五、畢業(yè)設(shè)計(jì)應(yīng)收集資料及參考文獻(xiàn): 搜集關(guān)于經(jīng)典密碼學(xué)相關(guān)資料; 收集教學(xué)演示軟件開發(fā)的案例及相關(guān)經(jīng)驗(yàn)。要求設(shè)計(jì)一個(gè)演示軟件,在 該軟件中能夠用經(jīng)典密碼密碼學(xué)中的幾個(gè)典型的加密解密算法對文本進(jìn)行加密與解密。 【 關(guān)鍵詞 】 仿射加密法;多文字加密法; Vigenere 加密法; Hill 加密法 陜西理工學(xué)院畢業(yè)設(shè)計(jì) The Development 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 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 objectoriented programming method, implementation of the affine encryption method, multiple text encryption method, Vigenere encryption method and Hill encryption method in Microsoft Visual C++ . Key words: Affine method。近年來,我國數(shù)據(jù)竊取事件層出不窮, CSDN、 珍愛網(wǎng) 、世紀(jì)佳緣、走秀等多家網(wǎng)站的用戶數(shù)據(jù)庫被曝光在網(wǎng)絡(luò)上,由于部分密碼以明文方式顯示,導(dǎo)致大量網(wǎng)民 的 個(gè)人信息泄露。 從古典密碼學(xué)的研究到現(xiàn)代密碼學(xué)的發(fā)展,密碼學(xué)在我們生活中扮演 著 越來越重要的角色。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 2 頁 共 45 頁 2 仿射加密法 算法概述 經(jīng)典單碼加密法的一個(gè)形式稱為仿射加密法。 例如,選取密鑰為 (2,7)。 計(jì)算可得 (95i+1)/a=a1,將“ pJdvzJdv”轉(zhuǎn)換成數(shù)字 11 7 100、 8 12 7 100、 86利用放射解密等式生成: c(P)=(48 ((11232)7)mod 95)+32=116, 即為字母“ t” c(J)=(48 ((7432)7)mod 95) +32=97, 即為字母“ a” c(d)=(48 ((10032)7)mod 95) +32=110, 即為 字母“ n” c(v)=(48 ((8632)7)mod 95) +32=103, 即為字母“ g” c(z)=(48 ((12232)7)mod 95) +32=110, 即為字母“ y” 這樣,對于 (2,7)這個(gè)密鑰,“ pJdvzJdv”解密后變成了“ tangyang” 核心代碼 //加密函數(shù) CString CFCpasswd::FCAddPass(CString newText,int a,int b) { int N,i。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 3 頁 共 45 頁 char *m_a = (())。i++) { mida = m_a[i] 32。\039。 for (i = 1。 } return 1。 if(fa == 1) return 。 (N)。 m_b = mida b。 } obvious[i] = 39。 } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 4 頁 共 45 頁 3 多文字加密法 算法概述 多文字加密法是另一種脆弱的單碼加密法,但是它與一般的單碼加密法又有一些不 同。字母表的每個(gè)字母填寫在這個(gè)矩陣中。 算法分析 在關(guān)鍵詞為 takes,明文為 tangyang 的情況下,加密解密過程如下: 加密過程: 密文“ ee”替代了明文的“ t”,密文“ tt”替代了明文的“ a”,以此類推,明文“ tangyang”加密后的密文為 ”ee tt kk aa se tt kk aa”。 int flag。 //明文數(shù)組 (textLen)。 for(i = 0。 j++) { 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 5 頁 共 45 頁 char mid = obvious[k]。i39。 flag = 1。 } k++。 return result。 int i,j,k = 0,n = 0。 char *chKey = (())。i 5。j 5。 n++。 } } obvious[k] = 39。 } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 7 頁 共 45 頁 4 Vigenere 加密法 算 法概述 Vigenere 加密法不同于上面的兩種加密法,它是一個(gè)著名的多碼加密法。 表 vigenere 表 a b c d e f g h i j k l m n o p q r s t u v w x y z a a b c d e f g h i j k l m n o p q r s t u v w x y z b b c d e f g h i j k l m n o p q r s t u v w x y z a c c d e f g h i j k l m n o p q r s t u v w x y z a b d d e f g h i j k l m n o p q r s t u v w x y z a b c e e f g h i j k l m n o p q r s t u v w x y z a b c d f f g h i j k l m n o p q r s t u v w x y z a b c d e g g h i j k l m n o p q r s t u v w x y z a b c d e f h h i j k l m n o p q r s t u v w x