版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、密碼學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告設(shè)計(jì)題目: 1、DES的編程實(shí)現(xiàn) 2、DES的短塊處理 3、DES的三圈差分攻擊學(xué)生姓名:學(xué)生學(xué)號(hào):班 級(jí): 指導(dǎo)老師: 時(shí)間:2012年2月25日目 錄DES背景介紹:3實(shí)驗(yàn)整體說明:3實(shí)驗(yàn)基礎(chǔ):3一、DES的編程實(shí)現(xiàn)3一、實(shí)驗(yàn)?zāi)康?二、 實(shí)驗(yàn)原理31、 加密過程32、 解密過程43、 密鑰生成過程54、 弱密鑰的檢測(cè)5三、 實(shí)驗(yàn)要求5四、 編程實(shí)現(xiàn)61、 實(shí)驗(yàn)環(huán)境說明62、 數(shù)據(jù)結(jié)構(gòu)63、核心函數(shù)介紹65、遇到的問題及解決辦法7二、 DES的短塊處理8一、 實(shí)驗(yàn)?zāi)康?二、 實(shí)驗(yàn)原理8三、 實(shí)驗(yàn)要求8四、 編程實(shí)現(xiàn)81、實(shí)驗(yàn)環(huán)境說明82、核心函數(shù)8三、DES的三圈差分攻
2、擊10一、實(shí)驗(yàn)?zāi)康?0二、實(shí)驗(yàn)原理101、差分攻擊的基礎(chǔ)102、差分攻擊10三、 實(shí)驗(yàn)要求13四、 編程實(shí)現(xiàn)131、 實(shí)驗(yàn)環(huán)境說明133、 數(shù)據(jù)結(jié)構(gòu)134、核心函數(shù)介紹13五、 遇到的問題及解決方法14實(shí)驗(yàn)成果整體說明:141、實(shí)驗(yàn)環(huán)境說明142、 文件介紹143、實(shí)驗(yàn)結(jié)果15實(shí)驗(yàn)特點(diǎn)與不足:20實(shí)驗(yàn)心得:21參考資料:21附錄22DES背景介紹:數(shù)據(jù)加密標(biāo)準(zhǔn)(DES,Data Encryption Standard)是一種使用密鑰加密的塊密碼,1976年被美國(guó)聯(lián)邦政府的國(guó)家標(biāo)準(zhǔn)局確定為聯(lián)邦資料處理標(biāo)準(zhǔn)(FIPS),隨后在國(guó)際上廣泛流傳開來。DES 使用一個(gè) 56 位的密鑰以及附加的 8 位奇
3、偶校驗(yàn)位,產(chǎn)生最大 64 位的分組大小。這是一個(gè)迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對(duì)其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過程會(huì)繼續(xù)下去,但最后一個(gè)循環(huán)不交換。DES 使用 16 個(gè)循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。這個(gè)算法因?yàn)榘恍C(jī)密設(shè)計(jì)元素,相對(duì)短的密鑰長(zhǎng)度以及被懷疑內(nèi)含美國(guó)國(guó)家安全局(NSA)的后門而在開始時(shí)是有爭(zhēng)議的,因此DES因此受到了強(qiáng)烈的學(xué)院派式的審查,并以此推動(dòng)了現(xiàn)代的塊密碼及其密碼分析的發(fā)展。實(shí)驗(yàn)整體說明:由于三個(gè)實(shí)驗(yàn)題目都是關(guān)于DES的問題,故我將三個(gè)實(shí)驗(yàn)代碼合
4、寫在了一個(gè).h文件中,在一個(gè)MFC工程文件中展示出來,故首先分析三個(gè)實(shí)驗(yàn)的基本原理、基本知識(shí),再在最后統(tǒng)一介紹編程實(shí)現(xiàn)。實(shí)驗(yàn)基礎(chǔ):一、DES的編程實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康?、通過實(shí)際編程,使學(xué)生進(jìn)一步熟悉密碼算法以及算法安全性的基本概念和原理。2、培養(yǎng)學(xué)生將密碼理論和技術(shù)應(yīng)用于實(shí)際的能力,使學(xué)生具備實(shí)施數(shù)據(jù)加、脫密和基本的密碼分析能力。3、掌握DES的加密、脫密和密鑰生成過程,加深對(duì)DES算法的認(rèn)識(shí)。2、 實(shí)驗(yàn)原理1、 加密過程DES是一個(gè)分組密碼,使用長(zhǎng)度為56比特的密鑰加密長(zhǎng)度為64比特的明文,獲得長(zhǎng)度為64比特的密文,其加密過程,如圖1。(1) 給定一個(gè)明文X,通過一個(gè)固定的初始置換IP置換X的
5、比特,獲得X0,X0=IP(X)=L0R0,L0R0分別是X0的前32比特和后32比特。(2) 然后進(jìn)行16輪完全相同的運(yùn)算,有如下規(guī)則,其中0<i<17,K1, K2,K16都是密鑰K的函數(shù),長(zhǎng)度均為48比特:,其中函數(shù)f(A,J)的A是一個(gè)長(zhǎng)度為32的比特串,第二個(gè)變量J是一個(gè)長(zhǎng)度為48的比特串,輸出的是一個(gè)長(zhǎng)度為32的比特串,其過程:如圖2。a、將f的第一個(gè)變量A根據(jù)一個(gè)固定的擴(kuò)展函數(shù)E擴(kuò)展成為一個(gè)長(zhǎng)度為48的比特串。b、計(jì)算 ,并將所得結(jié)果分成8個(gè)度為6的比特串,記為B=B1B2B3B4B5B6B7B8c、使用8個(gè)S盒,每個(gè)Si是一個(gè)固定的4x16階矩陣,它的元素來自0到1
6、5這16個(gè)整數(shù)。給定一個(gè)長(zhǎng)度為6的比特串,用首位兩個(gè)比特作行號(hào),用中間四個(gè)比特作為列號(hào),則Sj(Bj)的取值就是Sj的行號(hào)列號(hào)的整數(shù)所對(duì)應(yīng)的二進(jìn)制表示。記Cj=Sj(Bj),0<j<9。d、將長(zhǎng)度為32的比特串C=C1C2C3C4C5C6C7C8通過一個(gè)固定的置換P置換,將所得結(jié)果P(C)記為f(A,J)。(3) 將比特串L16,R16交換位置得到L16'與R16',應(yīng)用初始置換IP的逆置換IP-1,獲得密文Y,即Y=IP-1(L16'R16')。2、 解密過程解密過程原理如下:參考圖1,解密過程即是由Y得到X的過程,Y=IP-1(L16'R
7、16'),則由逆矩陣定義知IP(Y)=IP(IP-1(L16'R16')=L16'R16'=R16L16。已知:,故求得:以此可得L0,R0,由X0=IP(X)=L0R0,故X=IP-1(L0R0)。因此解密過程如圖3??梢园l(fā)現(xiàn),解密過程和加密過程算法完全一樣,只是所用的密鑰與加密過程順序相反而已。這也體現(xiàn)了作為分組密碼中的對(duì)稱密碼的DES特點(diǎn):加密和解密密鑰相同。由此可以看出對(duì)于f函數(shù)不需要求其有可逆性,即說明了DES是Feistel密碼。3、 密鑰生成過程密鑰方案計(jì)算:每一輪都是用不同的、從初始密鑰或稱種子密鑰K導(dǎo)出的48比特密鑰Ki。K是一個(gè)長(zhǎng)度為
8、64的比特串,實(shí)際上除去校驗(yàn)比特只有56比特有效:(1)給定一個(gè)64比特的密鑰K,利用一個(gè)固定的置換PC-1,刪掉8個(gè)校驗(yàn)比特,置換K的剩下的56比特,記PC-1(K) = C0D0,這里C0D0是PC-1(K)的前28比特、后28比特。(2)對(duì)每一個(gè)i,0<i<17,計(jì)算:其中LSi表示一個(gè)或兩個(gè)位置的左循環(huán)移位,當(dāng)i=1,2,9,4,16時(shí),一個(gè)位置,當(dāng)i=3,4,5,6,7,8,10,11,12,13,14,15時(shí),移動(dòng)兩個(gè)位置。PC-2是另一個(gè)固定置換。其過程如圖4。4、 弱密鑰的檢測(cè)DES的弱密鑰是指加密所用密鑰與解密所用子密鑰相同,即K1=K16,K2=K15,.,K9
9、=K8,即對(duì)一個(gè)明文加密2次,得到的還是明文。更強(qiáng)的,若K1=K2=.=K16,則加密與解密過程完全一樣。因此可以直接通過對(duì)生成的密鑰作檢測(cè)即可除去弱密鑰。3、 實(shí)驗(yàn)要求1、 輸入一串有意義的明文的漢字,顯示密文和脫密結(jié)果。2、 設(shè)計(jì)用戶窗口。3、 有實(shí)驗(yàn)環(huán)境說明,包括操作系統(tǒng)類型,機(jī)型,語言。對(duì)實(shí)驗(yàn)要求的分析如下:1、 能夠輸入輸出漢字,故實(shí)驗(yàn)環(huán)境的版本要支持漢字,可以選用codeblocks、vc等集成開發(fā)環(huán)境。2、 要求有用戶窗口,故可以采用MFC編程這一簡(jiǎn)單封裝度高的編程方式。4、 編程實(shí)現(xiàn)1、 實(shí)驗(yàn)環(huán)境說明系統(tǒng)類型:Microsoft Windows 7 旗艦版機(jī)型:AMD Athl
10、on(tm) 64 Dual-Core M300 2.00GHz 32位操作系統(tǒng)安裝內(nèi)存(RAM):2.00GB集成開發(fā)環(huán)境:microsoft visual c+ 6.0語言:功能函數(shù)用C語言編寫。 用戶界面用MFC編程實(shí)現(xiàn)。2、 數(shù)據(jù)結(jié)構(gòu)1、各個(gè)功能函數(shù)實(shí)現(xiàn)時(shí)都是用的int型數(shù)組存放結(jié)果的,即int型數(shù)組中成員值為1或者0。但與用戶交互的是字符形式,因此要編寫一些轉(zhuǎn)換類型的函數(shù)。(具體見下一項(xiàng)核心函數(shù)介紹)。2、存放子密鑰的是int型的16x48的二維數(shù)組,存放16個(gè)48位的密鑰。由于加解密都需要用到,我將該數(shù)組定義為了全局變量。3、各種置換表比如IP,IP-1,PC1,PC2,E,P等,
11、我是按照書上的數(shù)據(jù)輸入的,因?yàn)楹芏嗟胤接玫剑覍⑵涠x為了static const int型數(shù)組。3、 另外,定義了幾個(gè)宏,如右圖,方便以后更改數(shù)據(jù)。3、核心函數(shù)介紹一、數(shù)據(jù)轉(zhuǎn)換類的:若轉(zhuǎn)換成功,返回0,否則返回1。1、 void change(char a,int p,int k);將長(zhǎng)度為k的字符串a(chǎn)轉(zhuǎn)換為長(zhǎng)度為8k的int型數(shù)組p。如char a=32,轉(zhuǎn)換為int 型數(shù)組:00100000。2、 int change1(char a,int p,int k);將長(zhǎng)度為8k的int型數(shù)組p轉(zhuǎn)換為長(zhǎng)度為k個(gè)的字符串a(chǎn)。如int型00100000轉(zhuǎn)換為char a=32。3、 int cha
12、nge2(char a,int p,int k);將長(zhǎng)度為k的int型數(shù)組p轉(zhuǎn)換為對(duì)應(yīng)字符串a(chǎn),如int型00100000轉(zhuǎn)換為“00100000”。4、 int change3(char a,int p,int k);將長(zhǎng)度為k的int型數(shù)組p轉(zhuǎn)換為對(duì)應(yīng)字符串a(chǎn),如char *型“00100000”轉(zhuǎn)換為int 型00100000。二、功能函數(shù)實(shí)現(xiàn)1、int create_key(int pN1,int b56N2,int t);由int型的64位數(shù)組產(chǎn)生56位有用的密鑰(除去8位校驗(yàn)碼),從而產(chǎn)生t輪子密鑰,(之所以有t輪,而不是直接為16輪子密鑰,是考慮后面的三圈差分攻擊,在該實(shí)驗(yàn)中,調(diào)
13、用時(shí),置t=16)。若為弱密鑰則返回2,若成功返回0。2、void f(int f,int rN5,int k);f函數(shù)的編程實(shí)現(xiàn),輸入為32位int型數(shù)組r與48位數(shù)組密鑰k得到結(jié)果為32位的int型f數(shù)組。3、int encrypt(int eN1,int pN1,int kN3N4,int flag,int t);加密過程和解密過程,若為加密,則flag=0;若為解密,則flag=1,輸入為64位的int型數(shù)組p,處理結(jié)果存放在64位int型數(shù)組e中,密鑰為16x48的二維int型數(shù)組。t代表輪數(shù),主要考慮后面的差分攻擊,在該實(shí)驗(yàn)中,t=16。若加解密成功返回0,否則返回1.具體函數(shù)實(shí)現(xiàn)
14、見工程文件源代碼crack.h。5、遇到的問題及解決辦法1、有些字符加密后變成了0,顯示不出密文,不能正確解密。涉及到字符就比較難處理,我開始為簡(jiǎn)單起見,密文沒有用二進(jìn)制的形式輸出,但是很多情況下,我發(fā)現(xiàn)明文在加密后變成了0這對(duì)于字符的輸出就是“硬傷了”。解決辦法:采用二進(jìn)制形式輸出密文,就是增加了change2和change3兩個(gè)函數(shù),所以即使加密后變成了0,由于是二進(jìn)制表示的,轉(zhuǎn)換為二進(jìn)制后表示為01串,就沒有問題了,很多時(shí)候都可以正確地加解密。還要特別注意一點(diǎn)就是字符數(shù)組的長(zhǎng)度問題,要考慮到字符串結(jié)束符0的存在,我為此吃了不少苦頭,經(jīng)常數(shù)組空間溢出。2、 開始不能正確解密,調(diào)試程序發(fā)現(xiàn)沒
15、有錯(cuò)誤,后來,才發(fā)現(xiàn)是自己原理弄錯(cuò)了,因?yàn)樗惴ㄗ詈筮M(jìn)行IP逆置換之前忘記進(jìn)行交換L與R的操作,經(jīng)檢查,終于發(fā)現(xiàn)了錯(cuò)誤。3、 初始學(xué)習(xí)MFC編程,不知道怎么將結(jié)果顯示在編輯框中,后來通過網(wǎng)上查詢資料,發(fā)現(xiàn)了有類向?qū)Э梢躁P(guān)聯(lián)變量,又學(xué)習(xí)了幾個(gè)關(guān)聯(lián)變量的函數(shù),所以就很容易將算法與界面有效的聯(lián)系在一起了。2、 DES的短塊處理1、 實(shí)驗(yàn)?zāi)康?、 在實(shí)際應(yīng)用中,明文不一定為64bit的倍數(shù),該實(shí)驗(yàn)就是要處理當(dāng)明文不是64bit倍數(shù)時(shí)的加密明文的情況。2、 在不增加明文長(zhǎng)度的情況下加密明文,明密文的長(zhǎng)度相同。2、 實(shí)驗(yàn)原理因?yàn)橛脩糨斎氲拿魑牟灰欢ㄊ?4bit即不一定是8字節(jié)(英文字母為一個(gè)字節(jié),漢字為兩個(gè)
16、字節(jié))。而DES的處理單位為64bit,若要加密任意明文,需處理剩余的“短塊”。加密為圖5所示,解密為圖6所示:E(4)L代表是密文的左部分,E(4)R代表是密文的右部分。1、 加密:對(duì)于臨近“短塊”的64bit明文,在加密后右邊的密文和短塊組合成64bit再加密,因此臨近“短塊”的明文的右邊部分被加密兩次。2、 解密:解密過程為加密過程的逆過程,開始將有“短塊”的密文先解密,再解密其他64bit明文。3、 實(shí)驗(yàn)要求在不增加明密文長(zhǎng)度的情況下處理明密文不是64bit的情況的加解密操作。4、 編程實(shí)現(xiàn)1、實(shí)驗(yàn)環(huán)境說明系統(tǒng)類型:Microsoft Windows 7 旗艦版機(jī)型:AMD Athlo
17、n(tm) 64 Dual-Core M300 2.00GHz 32位操作系統(tǒng)安裝內(nèi)存(RAM):2.00GB集成開發(fā)環(huán)境:microsoft visual c+ 6.0語言:功能函數(shù)用C語言編寫。 用戶界面用MFC編程實(shí)現(xiàn)。2、核心函數(shù)在實(shí)驗(yàn)一的基礎(chǔ)上添加對(duì)短塊的處理函數(shù):1、 int DES1(char *e,char *p,char *k,int n);用密鑰字符串k,加密n字節(jié)的字符串p,結(jié)果存在字符串e中。若加密處理成功返回0,若有弱密鑰,返回2,其他失敗原因,返回1。其代碼如下:int DES1(char *e,char *p,char *k,int n)/*n字節(jié)的加密*/ in
18、t a,b,i0N1,i1N1,k0N1,knN2,i,j,p18*MAXLEN; a=n/8; b=n%8; change(k,k0,8); if(create_key(k0,kn,16)=2)/*產(chǎn)生16輪的密鑰*/return 2; for(i=0; i<a; +i) change(p+8*i),i0,8); encrypt(i1,i0,key,0,16);/*進(jìn)行16輪的加密*/ for(j=0; j<N1; +j) p164*i+j=i1j; if(b!=0) /*若有短塊,則處理*/ change(p+n-b),i0,b); for(j=0; j<b*8; +j)
19、 p164*a+j=i0j; for(j=0; j<N1; +j) i0j=p18*n-N1+j; encrypt(i1,i0,key,0,16); for(j=0; j<N1; +j) p18*n-N1+j=i1j; if(change2(e,p1,n*8)=1) return 1; return 0;2、 int DES2(char *d,char *e,char *k,int n);用密鑰字符串k,解密n字節(jié)的字符串e,結(jié)果存在字符串d中。若解密處理成功返回0,若有弱密鑰,返回2,其他失敗原因,返回1。其代碼與DES1類似,詳見源代碼crack.h文件。三、DES的三圈差分攻
20、擊一、實(shí)驗(yàn)?zāi)康?、讓學(xué)生深入了解DES差分攻擊的基本原理,了解DES三圈差分攻擊的過程和實(shí)現(xiàn)。2、培養(yǎng)學(xué)生將密碼理論和技術(shù)應(yīng)用于實(shí)際的能力,使學(xué)生具備基本的密碼分析能力和實(shí)際編程能力。3、培養(yǎng)學(xué)生自主完成學(xué)習(xí)任務(wù),在實(shí)踐中發(fā)現(xiàn)問題和解決問題的能力。4、培養(yǎng)學(xué)生自主思考和合作能力。二、實(shí)驗(yàn)原理1、差分攻擊的基礎(chǔ)上面的實(shí)驗(yàn)一加密原理中簡(jiǎn)略但全面地介紹了加密過程,可以看到其中主要起作用的算法有:矩陣置換、擴(kuò)展、左移、異或、左右互換、s盒作用 。其中對(duì)攻擊者來說最麻煩的要說s盒一步,破解DES體系關(guān)鍵在s盒。乍一看六位輸入與四位輸出貌似沒什么關(guān)系。但事實(shí)上,對(duì)于同一個(gè)s盒具有相同輸入異或的所有輸入六比
21、特組的輸出四比特異或值有一定規(guī)律。具體些說,對(duì)于輸入異或相同的明文對(duì)B,B*僅有32組,(本來是2的6次方64種可能,但因?yàn)閷?duì)稱性,所以只有32組),而這32組輸出異或卻并不是均勻分布,而是僅分布在很少的幾個(gè)四比特值中;也可以說具有相同輸入異或且輸出四比特異或也相同的六比特輸入數(shù)量不多且分布不均勻。正是這種輸入輸出輸出異或間的不均勻性可以被攻擊者利用并破解密鑰。真正的子密鑰必定每次都與其他密鑰異或后獲得對(duì)應(yīng)輸出。此方法對(duì)可選擇明文攻擊尤為有效。2、差分攻擊1、設(shè)3輪DES加密中,R2 經(jīng)E擴(kuò)展后為E1E 2E 3E 4E 5E 6E 7E 8,第3輪子密鑰為J=J1J 2J 3J4E 5J6J
22、 7J8。2、L0R0和L0*R0*是兩對(duì)明文,且選擇明文使得R0=R0*,對(duì)應(yīng)得密文分別為L(zhǎng)3R3和L3*R3*。則根據(jù)計(jì)算可得又f(R2,K3)=P(C), f(R2*,K3)=P(C*),其中C、C*分別為S盒的兩個(gè)輸出。因?yàn)槭荝0=R0*的明文對(duì),則有P(C)P(C*)=(R3R3*)(L0L0*),故可得C=CC*=P-1(R3'L0),這是第3輪DES的S盒輸出異或。另外由于R2= L3, R2*= L3*,則由擴(kuò)展函數(shù)E計(jì)算得E(L3)和E(L3*)進(jìn)而得到E,也即S盒輸入異或。這里的E就是S盒的差分輸入,C就是S盒的差分輸出,通過這兩個(gè)就可以得到第三輪加密時(shí)使用的子密鑰
23、。3、3輪DES的第三輪,已知E(R2),E(R2*)和CC*,則可構(gòu)造testj,0<j<9, 使testj包含Jj。testj中其實(shí)是對(duì)每一個(gè)S盒的輸入和輸出進(jìn)行比較。首先遍歷所有的可能的6位比特串,從000000(0)到111111(63),每次遍歷都要取出兩個(gè)比特串,然后判斷這兩個(gè)串是否滿足如下條件:第一:這兩個(gè)串異或結(jié)果是否等于Ei(這里E已經(jīng)分為8組6位);第二:這兩個(gè)串分別進(jìn)行S盒變換,對(duì)其結(jié)果進(jìn)行異或看是否等于Si(這里的S已經(jīng)分為8組4位)如果滿足則將這兩個(gè)6位比特串(記為A、B)分別和Ei異或得到的六比特就是K的可能值,放入集合中。注:,故取Ei為E(R2)或者
24、E(R2*)的對(duì)應(yīng)的6bit都沒影響,但是要統(tǒng)一。 4、對(duì)每個(gè)S盒都進(jìn)行這樣的遍歷之后便可得到八個(gè)集合,暫且定義為T1T8,每個(gè)集合中的6位比特串需要變?yōu)槭M(jìn)制,然后找到對(duì)應(yīng)的J矩陣(8*64的矩陣),將其對(duì)應(yīng)位加1。(舉個(gè)例子來說比如集合T1中有000000,000111,101000,101111,那么就需要對(duì)J1中的第0,7,40,47處的元素進(jìn)行加1,其他的依次類推,開始時(shí)J矩陣初始化為0。)5、因?yàn)橛腥齻€(gè)明文對(duì),因此循環(huán)三次之后得到J矩陣。對(duì)三個(gè)J矩陣對(duì)應(yīng)位相加后便可得到最后的結(jié)果矩陣J(8*64矩陣)。這里需要說明的是因?yàn)槭墙?jīng)過了3輪DES加密,因此J矩陣中的元素等于3的元素位置便
25、是密鑰比特。(對(duì)應(yīng)的位置是十進(jìn)制,需要變?yōu)?位二進(jìn)制,設(shè)為Ji6.此時(shí)便可得到第三輪加密時(shí)的密鑰即第三個(gè)子密鑰subkey3=J0J1 J2J3 J4J5 J6J7,這是一個(gè)48位的串),如果是k對(duì),則找J矩陣中的元素等于k的元素位置。我們遍歷的063的6bit就相當(dāng)于就是在找子密鑰,真正的子密鑰能夠滿足每次都能夠與其他的6bit數(shù)據(jù)異或(這是f函數(shù)的過程),獲得對(duì)應(yīng)輸出,所以真正的子密鑰能夠每次都符合條件,即對(duì)應(yīng)頻率為k。說明:一般35組明密文對(duì)可以找到密鑰,我就是采用通過不超過5對(duì)明密文對(duì)來攻擊的方式,即允許用戶輸入2、3、4、5對(duì)明密文對(duì),由于有時(shí)候同一S盒中J矩陣有多個(gè)位置是具有相同的
26、最高頻率,此時(shí)必須通過額外遍歷相應(yīng)位置待確定的密鑰才能攻擊,這樣說明輸入的明密文對(duì)不足以確定48bit的子密鑰,就會(huì)提示用戶重新輸入明密文對(duì)。6、 知道第三輪的子密鑰后,因此對(duì)其進(jìn)行逆運(yùn)算最后便可得到初始密鑰,不過這里的初始密鑰中并沒有得到初始時(shí)去掉的8個(gè)校驗(yàn)位,和已經(jīng)在PC-2置換中去掉的8個(gè)比特位,所以得到的初始密鑰中有16位是未知的,不過會(huì)對(duì)加密結(jié)果造成影響的只有8位,即通過PC-2去掉的那8位,8個(gè)未知的比特?cái)?shù)可以通過搜索28=256種可能的情況來確定。密鑰需滿足的條件:所有明文在密鑰加密后是相應(yīng)密文。到此也就完成了差分分析了?,F(xiàn)舉實(shí)例說明差分分析步驟:1、 現(xiàn)有3對(duì)明密文對(duì):組數(shù)明文
27、對(duì)密文對(duì)(1)748502cd38451097387475643845109703c70306d8a09f1078560a0960e6d4cb(2)486911026acdff31375bd31f6acdff3145fa285be5adc730134f7915ac253457(3)357418da013fec86d8a31b2f28bbc5cf0f317ac2b23cb9442、 通過對(duì)L3,L3*做E擴(kuò)展,獲得第三輪S盒的輸入3、 獲得S盒的輸入和輸出異或:4、 通過對(duì)每個(gè)S盒的063的遍歷,獲得J矩陣:分別是47、5、19、0、24、7、7、49位為3,其他位低于3。5、 將上面的數(shù)字轉(zhuǎn)換
28、為6bit的01串,獲得第三輪的48bit密鑰:6、 通過遍歷0255,將被PC2慮去的8位找到,使其滿足加密明文獲得的密文與輸入的密文一致,獲得第三輪未經(jīng)PC2置換的56bit密鑰:7、 將剩余8位填0,獲得初始的64bit密鑰。1a624c88520cec46。8、 攻擊成功結(jié)束。3、 實(shí)驗(yàn)要求1、輸入合適滿足條件的明密文對(duì),得到56位的有用密鑰比特,和一個(gè)完整的64bit密鑰。2、設(shè)計(jì)用戶窗口。3、有實(shí)驗(yàn)環(huán)境說明,包括操作系統(tǒng)類型,機(jī)型,語言。4、 編程實(shí)現(xiàn)1、 實(shí)驗(yàn)環(huán)境說明與上面兩個(gè)實(shí)驗(yàn)相同3、 數(shù)據(jù)結(jié)構(gòu)在實(shí)驗(yàn)三中,與用戶交互的是16進(jìn)制數(shù)據(jù),明密文對(duì)為嚴(yán)格的16位16進(jìn)制數(shù),因此不用
29、考慮短塊處理等細(xì)節(jié),在函數(shù)內(nèi)部處理時(shí)仍然采用int型的數(shù)組存放結(jié)果,其成員只為0或1。在實(shí)驗(yàn)一二的基礎(chǔ)上增加了如下數(shù)據(jù)結(jié)構(gòu):1、 明密文對(duì)最多五對(duì),故用5*17的char型二維數(shù)組存放與用戶交互的數(shù)據(jù),和5*64的int型數(shù)組存放中間的結(jié)果。2、 8x64的二維數(shù)組J,存放testj矩陣的結(jié)果。3、 為方便進(jìn)行16進(jìn)制的轉(zhuǎn)換,增添了兩個(gè)轉(zhuǎn)換函數(shù):static const char H1617= "0123456789abcdef"static const int H164= 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1, 0,1,0,0,0,1,0,1,0
30、,1,1,0,0,1,1,1, 1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1, 1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1;4、核心函數(shù)介紹在實(shí)驗(yàn)一二的基礎(chǔ)上增加了如下一些函數(shù):一、數(shù)據(jù)轉(zhuǎn)換類的:若轉(zhuǎn)換成功,返回0,否則返回1。1、int changeb(char a,int p,int k);將長(zhǎng)度為k個(gè)的字符串轉(zhuǎn)換為長(zhǎng)度為8k的int型數(shù)組。但是與實(shí)驗(yàn)一的change函數(shù)的惟一區(qū)別在于,每字節(jié)8位是顛倒的,如char a=32,轉(zhuǎn)換為int 型數(shù)組:00000100。這是為了方便后面產(chǎn)生隨機(jī)的E',C'。2、int changeH(ch
31、ar *a,int p,int k);將16進(jìn)制的字符串轉(zhuǎn)換成int型的0,1數(shù)組。3、int changes(char a,int p,int k);將int型的01數(shù)組轉(zhuǎn)換成16進(jìn)制字符串。二、功能函數(shù)實(shí)現(xiàn)1、int check(int a0N1,int a1N1,int kN3N4);檢驗(yàn)用密鑰k加密的密文a0是否是a1。若是,返回0,否則,返回1。2、void Jame(int a0N1,int b0N1,int a1N1,int b1N1);由一對(duì)明對(duì)(a0,b0)、相應(yīng)的密文對(duì)(a1,b1),引起的J矩陣的變化。3、int key_crack(char ki,char b5,int
32、 ti);全局變量的ti對(duì)明密文對(duì)通過差分攻擊得到的56bit的有用密鑰(b5(16進(jìn)制)和64bit密鑰(ki(16進(jìn)制)。若攻擊成功返回0,否則返回1。4、void randH(char a);隨機(jī)產(chǎn)生16位16進(jìn)字符放在數(shù)組a中。5、int createplain(char e,char b14);為保攻擊的成功率,隨機(jī)產(chǎn)生5對(duì)明密文對(duì)。若成功返回0,否則返回1。注:4、5僅為了驗(yàn)證該差分攻擊的正確性,讓用戶輸入密鑰,系統(tǒng)隨機(jī)產(chǎn)生5對(duì)明密文對(duì)。用戶可以再通過差分攻擊,得到密鑰,對(duì)比密鑰是否正確。3、 界面函數(shù)與實(shí)驗(yàn)一二相同。5、 遇到的問題及解決方法1、 為將三個(gè)實(shí)驗(yàn)做成一個(gè).h文件,故
33、我在前面的實(shí)驗(yàn)一、二的部分功能函數(shù)基礎(chǔ)上(比如encryp()、creat-key()等函數(shù))以增加參數(shù)的方式,擴(kuò)展了函數(shù)功能,使能被實(shí)驗(yàn)三利用,重用了代碼。2、 利用差分攻擊,對(duì)于每個(gè)S盒,最大頻率的計(jì)數(shù)器(J矩陣的最高數(shù)字所在的位置)可能不止有一個(gè),無法確定具體的子密鑰。對(duì)于這個(gè)問題,大概是每個(gè)同學(xué)都遇到的,這是因?yàn)樾畔⒉蛔?,有些S盒的輸入偏差比較分散,不夠集中,導(dǎo)致經(jīng)過固定對(duì)數(shù)的明密文后還是不能完全確定具體的子密鑰,這時(shí)的解決辦法只有增加輸入的明密文對(duì)數(shù)了。實(shí)驗(yàn)成果整體說明:1、實(shí)驗(yàn)環(huán)境說明系統(tǒng)類型:Microsoft Windows 7 旗艦版機(jī)型:AMD Athlon(tm) 64
34、Dual-Core M300 2.00GHz 32位操作系統(tǒng)安裝內(nèi)存(RAM):2.00GB集成開發(fā)環(huán)境:microsoft visual c+ 6.0語言:功能函數(shù)用C語言編寫。 用戶界面用MFC編程實(shí)現(xiàn)。2、 文件介紹1、 我將三個(gè)實(shí)驗(yàn)的功能函數(shù)寫在了一起,命名為crack.h函數(shù),在codeblocks中編譯運(yùn)行測(cè)試成功,說明功能實(shí)現(xiàn)成功。2、 在mirocsoft visual 6.0+中創(chuàng)建基于對(duì)話框的MFC工程,命名為DES。3、 將crack.h拷貝到該MFC工程目錄中,并在MFC工程文件中增添:include "crack.h"文件。4、編寫、畫MFC文件的
35、各控件,實(shí)現(xiàn)界面和功能的統(tǒng)一。界面編輯用到的函數(shù):1、UpdateData();/TRUE刷新控件的值到對(duì)應(yīng)的變量,F(xiàn)ALSE拷貝變量值到控件顯示2、kei=m_key.GetAt(i);獲取m_key所關(guān)聯(lián)的編輯框的字符賦給ke字符數(shù)組。3、m_dplain.Format("%s",c);將字符數(shù)組c的數(shù)據(jù)以字符串形式賦給m_dplain。4、n1=m_cipher.GetLength();獲取字符串長(zhǎng)度。5、SetDlgItemText(IDC_EDIT12,time1);將字符串顯示在編輯框內(nèi)。3、實(shí)驗(yàn)結(jié)果一、整體界面介紹實(shí)驗(yàn)一、二、三被融合在了一個(gè)界面中,在整個(gè)界面
36、(如圖9)左邊為加解密部分,右邊為差分攻擊部分。界面下有兩個(gè)按鈕關(guān)于制作者信息(如圖8),和退出界面,兩按鈕中間是編輯框,顯示執(zhí)行當(dāng)前操作的時(shí)間。二、加解密部分:1、編輯框的輸入輸出說明密鑰、明文的輸入為漢字、英文字符、數(shù)字、標(biāo)點(diǎn)符號(hào)、或者空格,漢字占2個(gè)字節(jié),英文字母和數(shù)字占1個(gè)字節(jié)。密文輸入為二進(jìn)制數(shù)字,即01串。密鑰長(zhǎng)度為恒定的8字節(jié)。若不為8字節(jié),則會(huì)出現(xiàn)錯(cuò)誤提示;若為弱密鑰,則會(huì)提示出錯(cuò)信息,如圖10。明文長(zhǎng)度不低于8字節(jié),否則,會(huì)出現(xiàn)錯(cuò)誤提示,如圖11。密文01串,至于為什么不用亂碼顯示,而用二進(jìn)制顯示,前面實(shí)驗(yàn)一的編程實(shí)現(xiàn)中提到了原因,該串長(zhǎng)度不低于64位,否則出現(xiàn)錯(cuò)誤提示,如圖
37、12。2、 操作說明加密:在輸入密鑰、明文后,單擊“加密”按鈕,若操作成功,則會(huì)提示“加密成功”,密文則在密文框內(nèi)顯示,否則,提示失敗原因。同時(shí)時(shí)間框顯示操作執(zhí)行的時(shí)間。解密:將密文、密鑰輸入,單擊“解密”按鈕,若操作成功,則會(huì)提示“解密成功”,脫密文在脫密文框內(nèi)顯示,否則,提示失敗原因。同時(shí)時(shí)間框顯示操作執(zhí)行的時(shí)間。(在僅僅只是為了驗(yàn)證算法正確性時(shí)就沒必要重新輸入了,因?yàn)樵谏厦婕用懿僮鞯幕A(chǔ)上,密文和密鑰都在框內(nèi),直接單擊“解密”按鈕即可)。3、 實(shí)驗(yàn)結(jié)果:輸入一段有意義的明文,該明文中有空格、空格、數(shù)字、漢字、標(biāo)點(diǎn)符號(hào),經(jīng)8字節(jié)(64bit)密鑰加密后得到了一段密文。將得到的密文經(jīng)過原密鑰
38、脫密,得到了脫密文,經(jīng)過對(duì)比,可以知道,脫密文與明文一模一樣,如圖13。因此實(shí)驗(yàn)成功!三、差分攻擊1、 模塊說明該實(shí)驗(yàn)分為:明密文對(duì)的輸入,經(jīng)過攻擊密鑰的顯示,經(jīng)過加密核對(duì)密鑰的正確性,隨機(jī)產(chǎn)生明密文對(duì)(該模塊可選)。對(duì)于隨機(jī)產(chǎn)生明密文對(duì)的模塊:只是為了驗(yàn)證算法的正確性時(shí),可以輸入一個(gè)密鑰,然后隨機(jī)產(chǎn)生明密文對(duì),通過攻擊,得到攻擊得到的密鑰,通過對(duì)比,可以驗(yàn)證算法的正確性。2、編輯框的輸入輸出說明明文、密文、密鑰都是用16進(jìn)制的字符表示的。密鑰長(zhǎng)度為16位的16進(jìn)制數(shù),下方的只讀編輯框顯示的是該密鑰經(jīng)過PC1置換后的剩余56bit密鑰情況。明文長(zhǎng)度為16x2xk的k對(duì)16進(jìn)制明文,順序?yàn)锳A&
39、#39;BB'CC'.(k=3,4,5)密文長(zhǎng)度為16x2xk的k對(duì)16進(jìn)制密文,順序?yàn)镋(A)E(A')E(B)E(B')E(C)E(C').3、操作說明操作使用時(shí)間都在下方的“耗時(shí)”編輯框內(nèi)顯示。輸入明密文對(duì):可以是自己手動(dòng)輸入,或者系統(tǒng)根據(jù)用戶在可選模塊里輸入的密鑰隨機(jī)產(chǎn)生明密文對(duì)。攻擊:在第一步后單擊“攻擊”按鈕,若攻擊成功,攻擊所得密鑰將會(huì)在編輯框中顯示,其中上面的為得到的64bit,下面的為經(jīng)過PC1置換的56bit,真正在加解密過程中起作用的是下面的56bit。若攻擊失敗,則可能是由于信息不足(在同一個(gè)S盒中有多個(gè)位置有最高頻率,因此無法確
40、定具體的密鑰,如圖14),可能是由于密文和明文不是經(jīng)過同一密鑰加密得到的,所以不能得到密鑰,如圖14。加密核對(duì):?jiǎn)螕簟凹用堋卑粹o,明文對(duì)在攻擊所得的密鑰的加密下獲得另一份密文對(duì),顯示在“用攻擊所得密鑰加密結(jié)果”框內(nèi),單擊“核對(duì)”按鈕,可以彈出對(duì)話框,顯示這一份加密的密文對(duì)與用戶輸入的是否相同,若相同,則顯示攻擊成功,否則,攻擊失敗,如圖14。4、 實(shí)驗(yàn)結(jié)果:輸入明密文對(duì)為:組數(shù)明文對(duì)密文對(duì)(1)748502cd38451097387475643845109703c70306d8a09f1078560a0960e6d4cb(2)486911026acdff31375bd31f6acdff3145
41、fa285be5adc730134f7915ac253457(3)357418da013fec86d8a31b2f28bbc5cf0f317ac2b23cb944密鑰1a624c89520dec46經(jīng)過單擊“加密”得到用攻擊所得密鑰加密的密文,我們可以看到得到的密文與輸入的密文是相同,如圖15,單擊“核對(duì)”,彈出對(duì)話框,顯示“攻擊成功!”如圖16。5、在差分攻擊中方便理解整個(gè)算法過程,我有一塊可選項(xiàng)隨機(jī)產(chǎn)生明密文:1、輸入密鑰1234567890abcdef2、 單擊“根據(jù)密鑰隨機(jī)產(chǎn)生明密文對(duì)”按鈕3、 可以看到界面出現(xiàn)了輸入的密鑰經(jīng)PC1變換成56bit后的密鑰(f0ccaa1a5c6e8f
42、)、明文對(duì)、密文對(duì)(為對(duì)應(yīng)的5對(duì))4、 單擊“攻擊”按鈕,可以看到彈出了對(duì)話框“攻擊成功”,顯示出來攻擊得到的64、56bit密鑰??梢钥吹诫m然64bit密鑰有略微差異,但實(shí)際起作用的56bit密鑰(f0ccaa1a5c6e8f)是相同的。5、 單擊“加密”、“核對(duì)”按鈕,可以看到攻擊所得密鑰與原密鑰加密的密文相同,即攻擊成功。實(shí)驗(yàn)特點(diǎn)與不足:1、 特點(diǎn)1、 完善的提示信息豐富的出錯(cuò)信息各種出錯(cuò)信息,操作的結(jié)果都會(huì)以對(duì)話框的形式展現(xiàn)給用戶,對(duì)于失敗操作都提示了原因,比如在加解密中因有字?jǐn)?shù)限制或者存在弱密鑰致使操作失敗,會(huì)分別提示信息,見圖1012;在差分攻擊中,因?yàn)檩斎氲谋仨毷?6進(jìn)制數(shù)據(jù)、明
43、密文對(duì)不超過5對(duì)等限制,有可能明密文不對(duì)應(yīng)、明密文不是用16進(jìn)制表示的、明密文對(duì)數(shù)超過5對(duì),明密文提供的信息不足以確定密鑰等各種錯(cuò)誤,所以有更加豐富的提示信息。界面友好的提示信息可以發(fā)現(xiàn)界面左上角會(huì)有一些注釋,是提示用戶基本的使用方法,比如進(jìn)制、位數(shù)等,減少用戶出錯(cuò)次數(shù)。2、 比較少的限制條件在加解密中對(duì)用戶輸入形式限制很少,空格、漢字、英文都不限制,這給用戶帶來了便捷。還可以加密多個(gè)段落。在差分攻擊中,對(duì)明密文對(duì)數(shù)限制比較少,一般5對(duì)明密文就可以將密鑰破譯出來,合適的明密文3對(duì)即可,用戶可以自己選擇輸入多少對(duì)明密文。3、 比較高的執(zhí)行效率,系統(tǒng)有自動(dòng)計(jì)算操作所需時(shí)間功能。由于DES本身就比較
44、簡(jiǎn)單,所以執(zhí)行時(shí)間都比較短,沒有出現(xiàn)過卡死情況。2、 不足在實(shí)驗(yàn)實(shí)現(xiàn)上,我自己想要實(shí)現(xiàn)的功能都基本上實(shí)現(xiàn)了,所以似乎沒有什么可以稱之為不足的。但是我在跟其他同學(xué)交流之后,發(fā)現(xiàn)自己是多么的狹隘,很多同學(xué)都不僅限于完成老師的任務(wù)了,他們挑著最難的DES分析和RSA的攻擊做,我發(fā)現(xiàn)自己跟他們比,實(shí)在是太沒追求了。實(shí)驗(yàn)心得:1、 這次實(shí)驗(yàn)我對(duì)DES弄得更加清楚了,在學(xué)習(xí)理論的的時(shí)候我一直沒有弄懂什么叫做“加解密的算法相同,什么叫做對(duì)稱密碼”,通過在不斷地深入了解DES,對(duì)這些知識(shí)有了很深切的體會(huì)。特別在差分分析中,雖然我自己覺得差分分析我弄懂了,但我還是我苦苦糾結(jié)了幾天,因?yàn)椴罘址治龅脑砗筒襟E在網(wǎng)頁
45、上都有很多,但是我一直想弄清楚為什么這樣子做下去就得到了密鑰了呢?最后不斷地看原理、查書籍,終于理解了網(wǎng)頁上所謂的j矩陣(實(shí)質(zhì)也就是計(jì)數(shù)器),終于理解了子密鑰來源于多對(duì)明密文對(duì)的差分分析的頻率最高點(diǎn),也只有子密鑰才會(huì)讓其計(jì)數(shù)器對(duì)應(yīng)的頻率最高,所以只有當(dāng)一個(gè)S盒的頻率最高值只有一個(gè)時(shí),子密鑰才出現(xiàn),否則還需要繼續(xù)通過明密文對(duì)篩選出真正的子密鑰。2、 我自己感覺編程能力有了較大的提高,因?yàn)樵谡麄€(gè)實(shí)驗(yàn)中,每一個(gè)流程,每一個(gè)功能函數(shù)都是我自己編寫的,雖然算法是參考的書籍,但是代碼從頭到尾都是我自己敲進(jìn)去的,很多函數(shù)都是一個(gè)一個(gè)調(diào)試清楚了,再繼續(xù)下一步,這也讓我懂得了編程調(diào)試的方法。其中的調(diào)試之路,回想
46、起來真的讓我很受用,為了一個(gè)“0”,我調(diào)試了1天,將密文由字符形式改成了二進(jìn)制形式,我更加深刻地理解了字符串的特性;在差分攻擊中,由于我有自己輸入密鑰,再產(chǎn)生明密文,再攻擊的整體檢驗(yàn)過程,所以我可以一直試驗(yàn)對(duì)各種密鑰的攻擊,但通過一直的試驗(yàn)發(fā)現(xiàn)了一個(gè)怪現(xiàn)象:對(duì)于某些密鑰產(chǎn)生的明密文,總是攻擊不成功,但對(duì)有些能攻擊成功。這就讓我無奈了,實(shí)在想不出差分攻擊竟然跟密鑰有關(guān)!難道是弱密鑰?實(shí)在沒有道理,后來我?guī)缀跸脒^,差分分析有概率性吧,有些是攻擊不成功的,但后來還是不甘心,找了一個(gè)也是做DES的同學(xué),我自己產(chǎn)生明密文,讓她幫我用她的程序攻擊,結(jié)果她可以攻擊成功,這就讓我確定了,確實(shí)還是我程序問題,可
47、是問題出現(xiàn)在哪呢?經(jīng)過多次單步調(diào)試,發(fā)現(xiàn)了一個(gè)天大的弱智錯(cuò)誤!在確定48bit數(shù)據(jù)后還要確定56bit數(shù)據(jù)的過程中,在確定這8位時(shí),采用的方法是窮舉法,可惜的是,我竟然窮舉時(shí)錯(cuò)誤地從063,本應(yīng)該是0255的!3、 通過此次試驗(yàn),我學(xué)會(huì)了利用網(wǎng)絡(luò)資源,不是抄襲、拷貝別人的代碼,而是學(xué)習(xí)別人的知識(shí),比如原理、過程分析,當(dāng)然也可以學(xué)習(xí)代碼風(fēng)格,這樣方便規(guī)范自己,讓自己的代碼與別人更能溝通。參考資料:1、 密碼學(xué)原理與實(shí)踐(第三版)馮登國(guó) 譯2、 windows編程循序漸進(jìn)張靜盛 編著3、 6%82%e8%bf%b0.html附錄源代碼:crack.h#include <stdio.h>
48、#include <stdlib.h>#include<string.h>#include<time.h>#define N1 64#define N2 56#define N3 16#define N4 48#define N5 32#define N6 28#define MAXLEN 1024/*加密的字符最大數(shù)*/int plain15N1,plain25N1,cipher15N1,cipher25N1;/*明密文對(duì)二進(jìn)制表示存放的數(shù)組*/char plaintext1517,plaintext2517,ciphertext1517,cipherte
49、xt2517;/*明密文對(duì)字符串形式存放的數(shù)組*/int keyN3N4;/*存放各輪子密鑰*/int J864;/*J矩陣,相當(dāng)于子密鑰的計(jì)數(shù)器*/static const char H1617= "0123456789abcdef"static const int IP1N1/*加解密時(shí)置換*/ = 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 3
50、3, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7;static const int IP2N1/*加密時(shí)逆置換*/ = 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 3
51、5, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25;static const int H164= 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1, 0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1, 1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1, 1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1;static const int PC1N2/*密鑰產(chǎn)生時(shí)PC1*/= 57, 49, 41, 33, 25,
52、17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4;static const int PC2N4/*密鑰產(chǎn)生時(shí)pc2*/ = 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16
53、, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32;static const int leftshift16/*密鑰產(chǎn)生時(shí)左移*/ = 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;static const int S8416 /*f函數(shù)中的S盒*/= /* S1 */ 14, 4,13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8,
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 柴油銷售合同模板
- 2024農(nóng)村土地流轉(zhuǎn)及發(fā)包合同書
- 2024商鋪?zhàn)赓U合同(奶茶店)
- 2024學(xué)校食堂供貨標(biāo)準(zhǔn)合同范本
- 2024年終止合同協(xié)議書解除合同協(xié)議書
- 2024年螺旋包裝機(jī)買賣合同
- 資產(chǎn)轉(zhuǎn)讓報(bào)價(jià)委托協(xié)議
- 2024貴陽勞動(dòng)合同范本專業(yè)版范文
- 公司與旅行社合作契約示例
- 國(guó)際認(rèn)證委托協(xié)議書格式
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 備戰(zhàn)2024年高考英語考試易錯(cuò)點(diǎn)12 名詞性從句(4大陷阱)(解析版)
- 公務(wù)員歷史常識(shí)100題及一套完整答案
- 信息技術(shù)與高中英語教學(xué)融合的途徑
- 花籃拉桿式懸挑腳手架.計(jì)算書及相關(guān)圖紙
- 職業(yè)道德與法律說課稿市公開課一等獎(jiǎng)省賽課微課金獎(jiǎng)?wù)n件
- 《電力建設(shè)施工技術(shù)規(guī)范 第2部分:鍋爐機(jī)組》DLT 5190.2
- 史學(xué)概論完整版本
- 供水管網(wǎng)搶修管理課件
- 信訪維穩(wěn)工作培訓(xùn)
- 全國(guó)初中數(shù)學(xué)優(yōu)質(zhì)課《平行四邊形的性質(zhì)》課件
評(píng)論
0/150
提交評(píng)論