【正文】
int Foo::f(int x) {...} float Foo::g(int x, int y) {...} interface Foo : NSObject { double x。在此論文完成之際,謹(jǐn)向李老師致以最誠摯的感謝和敬意。 測試數(shù)據(jù): tangyang 陜西理工學(xué)院畢業(yè)設(shè)計 第 20 頁 共 45 頁 密鑰: 4 4 可逆矩陣 ?????????????4116109485105965968k 根據(jù)給定測試數(shù)據(jù)得加密后的數(shù)據(jù)為: =$v|eB0O,如圖 所示: 圖 Hill 加密法加密測試 將測試數(shù)據(jù)加密后的數(shù)據(jù)解密后得原測試數(shù)據(jù): tangyang,如圖 所示: 圖 Hill 加密法解密測試 經(jīng)測試,系統(tǒng)已達到設(shè)計要求。 i 4。 } void CHillPasswd::setArray(int array[][4]) { int i, j。 } if (less == 3) { obvious[j] = Passwd[j]。 obvious[j+1] = (ArrayNKey[1][0] * (Passwd[j] 32) + ArrayNKey[1][1] * (Passwd[j+1] 32) + ArrayNKey[1][2] * (Passwd[j+2] 32) + ArrayNKey[1][3] * (Passwd[j+3] 32)) % 95 + 32。 } //解密函數(shù) CString CHillPasswd::HillRelessPass(CString oldText) { int i = 0,j = 0。 } if (less == 3) { Passwd[j] = obvious[j]。 Passwd[j+1] = (ArrayKey[1][0] * (obvious[j] 32) + ArrayKey[1][1] * (obvious[j+1] 32) + ArrayKey[1][2] * (obvious[j+2] 32) + ArrayKey[1][3] * (obvious[j+3] 32)) % 95 + 32。 核心代碼 //加密函數(shù) CString CHillPasswd::HillAddPass(CString newText) { int i = 0,j = 0??梢杂脭?shù)學(xué)方法表示 Hill 加密的一般形式。每個明文字母被賦予一個數(shù)值 ,通常是 a=0,b=1,? ,z=25,但 Hill 使用的是隨機賦值,塊中每個字母的數(shù)值一起用來生成一組新的數(shù)值,這些數(shù)值就用來表示密文字母。 flag = 0。 chj = Passwd[k] + 32。 k textLen。 CString result。 return result。 j = getPassNum(chj)。 chPassKey[k] 91) //處理大寫字母 { chi = chPassKey[k] + 32。 Passwd = new char[textLen]。 } if (M == 0) return。 核心代碼 //加密函數(shù) void CVienerePasswd::getPassKey(CString text,char *result,int len) //構(gòu)建與明文字符長度相同 的密鑰數(shù)組 { int N = len / ()。 表 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 y z a b c d e f g i i j k l m n o p q r s t u v w x y z a b c d e f g h j j k l m n o p q r s t u v w x y z a b c d e f g h i k k l m n o p q r s t u v w x y z a b c d e f g h i j l l m n o p q r s t u v w x y z a b c d e f g h i j k m m n o p q r s t u v w x y z a b c d e f g h i j k l n n o p q r s t u v w x y z a b c d e f g h i j k l m o o p q r s t u v w x y z a b c d e f g h i j k l m n p p q r s t u v w x y z a b c d e f g h i j k l m n o q q r s t u v w x y z a b c d e f g h i j k l m n o p r r s t u v w x y z a b c d e f g h i j k l m n o p q s s t u v w x y z a b c d e f g h i j k l m n o p q r t t u v w x y z a b c d e f g h i j k l m n o p q r s u u v w x y z a b c d e f g h i j k l m n o p q r s t v v w x y z a b c d e f g h i j k l m n o p q r s t u w w x y z a b c d e f g h i j k l m n o p q r s t u v x x y z a b c d e f g h i j k l m n o p q r s t u v w y y z a b c d e f g h i j k l m n o p q r s t u v w x z z 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 陜西理工學(xué)院畢業(yè)設(shè)計 第 8 頁 共 45 頁 算法分析 在關(guān)鍵詞為“ make”,而明文為“ tangyang”的情況下,關(guān)聯(lián)詞 明文的關(guān)聯(lián)如下: 表 明文、密文對照表 密鑰 m a k e m a k e 明文 t a n g y a n g 加密過程:用密鑰字母確定表的行,而明文字母確定表的列,表中行列交叉處的字母就是用來替代明文字母的密文。 } } obvious[k] = 39。j 5。 char *chKey = (())。 return result。 flag = 1。 j++) { 陜西理工學(xué)院畢業(yè)設(shè)計 第 5 頁 共 45 頁 char mid = obvious[k]。 //明文數(shù)組 (textLen)。 算法分析 在關(guān)鍵詞為 takes,明文為 tangyang 的情況下,加密解密過程如下: 加密過程: 密文“ ee”替代了明文的“ t”,密文“ tt”替代了明文的“ a”,以此類推,明文“ tangyang”加密后的密文為 ”ee tt kk aa se tt kk aa”。 } 陜西理工學(xué)院畢業(yè)設(shè)計 第 4 頁 共 45 頁 3 多文字加密法 算法概述 多文字加密法是另一種脆弱的單碼加密法,但是它與一般的單碼加密法又有一些不 同。 m_b = mida b。 if(fa == 1) return 。 for (i = 1。i++) { mida = m_a[i] 32。 計算可得 (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)這個密鑰,“ pJdvzJdv”解密后變成了“ tangyang” 核心代碼 //加密函數(shù) CString CFCpasswd::FCAddPass(CString newText,int a,int b) { int N,i。 陜西理工學(xué)院畢業(yè)設(shè)計 第 2 頁 共 45 頁 2 仿射加密法 算法概述 經(jīng)典單碼加密法的一個形式稱為仿射加密法。近年來,我國數(shù)據(jù)竊取事件層出不窮, CSDN、 珍愛網(wǎng) 、世紀(jì)佳緣、走秀等多家網(wǎng)站的用戶數(shù)據(jù)庫被曝光在網(wǎng)絡(luò)上,由于部分密碼以明文方式顯示,導(dǎo)致大量網(wǎng)民 的 個人信息泄露。要求設(shè)計一個演示軟件,在 該軟件中能夠用經(jīng)典密碼密碼學(xué)中的幾個典型的加密解密算法對文本進行加密與解密。 More text method。 但由于密碼學(xué)是神秘而富有冒險色彩的,它不 僅僅 是計算機科學(xué)的內(nèi)容,因此,學(xué)習(xí)密碼學(xué)必須具有寬廣的知識背景。(由于 2 與 95 的最大公約數(shù)為 1,即 GCD(2,95)=1,則 2 可以作為密鑰中的 a)。 //將字符串轉(zhuǎn)換成字符數(shù)組 (())。 (%s,Passwd)。 } CString CFCpasswd::FCRelessPass(CString oldText,int a,int b) { int N,i,m_b。 for(i = 0。\039。當(dāng)然,矩陣只有 25 個位置,而字母表有 26 個字母,因此字母“ i”和“ j”占同一個單元,這就意味著所有的“ j”都變成了“ i”。 //狀態(tài)標(biāo)志, 1 表示明文字符在字母表范圍之內(nèi), 0 表示不在范圍內(nèi) int i,j,k = 0,n = 0。 i 5。 if (ArrayKey[i][j] == mid) { Passwd[n] = chKey[i]。 } Passwd[n] = 39。 obvious = new char[textLen/2]。i++) { if(Passwd[n] == chKey[i]) { flag = 1。 } if(flag == 1) { obvious[k] = ArrayKey[i][j]。 Vigenere 加密法是基于關(guān)鍵詞的加密系統(tǒng),但不是像單碼關(guān)鍵詞加法那樣使用關(guān)鍵詞來定義替換模式的。要實現(xiàn)這些 ,找到由密鑰確定的行,掃描該行,直到找到密文字母,該密文字母所在列的第一個字母就是明文字母。 for (int i = 1。 CString result。 k textLen。 chj = obvious[k] + 32。 } } Passwd[k] = 39。 } //解密函數(shù) CString CVienerePasswd::VIGRelessPass(CString oldText,CString passKey) { int flag = 0。 char *chPassKey = new char[textLen]。 if (Passwd[k] 64 amp。 t++) { if (ArrayKey[i][t] == chj) break。 return result。因此,上述關(guān)系方程組可表示 為: 95m o d)(c 3132121111 pkpkpk ??? 95m o d)(c 3232221212 pkpkpk ??? 95m o d)(c 3332321313 pkpkpk ??? 最簡單的方法是使用 矩陣。 首