DES原理簡介課件_第1頁
DES原理簡介課件_第2頁
DES原理簡介課件_第3頁
DES原理簡介課件_第4頁
DES原理簡介課件_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、des算法   DES算法DES算法為密碼體制中的對稱密碼體制,又被成為美國數(shù)據(jù)加密標(biāo)準(zhǔn),是1972年美國IBM公司研制的對稱密碼體制加密算法。 明文按64位進(jìn)行分組, 密鑰長64位,密鑰事實上是56位參與DES運(yùn)算(第8、16、24、32、40、48、56、64位是校驗位, 使得每個密鑰都有奇數(shù)個1)分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。目錄DES工作的基本原理DES加密算法特點(diǎn)主要流程DES算法的應(yīng)用誤區(qū)DES算法源程序展開DES工作的基本原理其入口參數(shù)有三個:key、data、mode。 key為加密解密使用的密鑰,data為加密

2、60;  des算法結(jié)構(gòu)解密的數(shù)據(jù),mode為其工作模式。當(dāng)模式為加密模式時,明文按照64位進(jìn)行分組,形成明文組,key用于對數(shù)據(jù)加密,當(dāng)模式為解密模式時,key用于對數(shù)據(jù)解密。實際運(yùn)用中,密鑰只用到了64位中的56位,這樣才具有高的安全性。 DES加密算法特點(diǎn)分組比較短、密鑰太短、密碼生命周期短、運(yùn)算速度較慢。 主要流程DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,整個算法   des算法流程圖的主流程圖如下:置換規(guī)則表其功能是把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,其置換規(guī)則見下表:

3、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,33,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, 即將輸入的第58位換到第一位,第50位換到第2位,.,依此類推,最后一位是原來的第7 位。L0、R0則是換位輸出后的兩部分,L0是輸出的左32位,R0 是右32位,例:設(shè)置換前的輸入值為D1D2D3.D64,則經(jīng)過初始置換后

4、的結(jié)果 為:L0=D58D50.D8;R0=D57D49.D7。 經(jīng)過16次迭代運(yùn)算后。得到L16、R16,將此作為輸入,進(jìn)行逆置換,即得到密文輸出。逆置換正好是初始置換的逆運(yùn)算。例如,第1位經(jīng)過初始置換后,處于第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規(guī)則如下表所示: 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,35,3,43,11,51,19,59,27, 34,2,42,10,50,1

5、8,58 26,33,1,41, 9,49,17,57,25,放大換位表32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11, 12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21, 22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,單純換位表16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,功能表在f(Ri,Ki)算法描述圖中

6、,S1,S2.S8為選擇函數(shù),其功能是把48bit數(shù)據(jù)變?yōu)?2bit數(shù)據(jù)。下面給出選擇函數(shù)Si(i=1,2.8)的功能表: 選擇函數(shù)Si 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,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,   des算法S2: 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15

7、,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, S3: 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, S4: 7,13,14,3,0,6,9,10,1,2,8,5,11,

8、12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, S5: 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, S6: 12,1,10,15

9、,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, S7: 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,

10、3,12, S8: 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11, 在此以S1為例說明其功能,我們可以看到:在S1中,共有4行數(shù)據(jù),命名為0,1、2、3行;每行有16列,命名為0、1、2、3,.,14、15列。 現(xiàn)設(shè)輸入為: D=D1D2D3D4D5D6 令:列=D2D3D4D5 行=D1D6 然后在S1表中查得對應(yīng)的數(shù),以4位二進(jìn)制

11、表示,此即為選擇函數(shù)S1的輸出。下面給出子密鑰Ki(48bit)的生成算法子密鑰Ki(48bit)的生成算法從子密鑰Ki的生成算法描述圖中我們可以看到:初始Key值為64位,但DES算法   des算法規(guī) 定,其中第8、16、.64位是奇偶校驗位,不參與DES運(yùn)算。故Key 實際可用位數(shù)便只有56位。即:經(jīng)過縮小選擇換位表1的變換后,Key 的位數(shù)由64 位變成了56位,此56位分為C0、D0兩部分,各28位,然后分別進(jìn)行第1次循環(huán)左移,得到C1、D1,將C1(28位)、D1(28位)合并得到56 位,再經(jīng)過縮小選擇換位2,從而便得到了密鑰K0(48位)。依此類推,便可得到

12、K1、K2、.、K15,不過需要注意的是,16次循環(huán)左移對 應(yīng)的左移位數(shù)要依據(jù)下述規(guī)則進(jìn)行:循環(huán)左移位數(shù)1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 以上介紹了DES算法的加密過程。DES算法的解密過程是一樣的,區(qū)別僅僅在于第一次迭代時用子密鑰K15,第二次K14、.,最后一次用K0,算法本身并沒有任何變化。 DES算法的應(yīng)用誤區(qū)特點(diǎn) DES算法具有極高安全性,到目前為止,除了用窮舉搜索法對DES算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。而56位長的密鑰的窮舉空間為256,這意 味著如果一臺計算機(jī)的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可

13、見,這是難以實現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的發(fā) 展,當(dāng)出現(xiàn)超高速計算機(jī)后,我們可考慮把DES密鑰的長度再增長一些,以此來達(dá)到更高的保密程度。應(yīng)用誤區(qū)由上述DES算法介紹我們可以看到:DES算法中只用到64位密鑰中的   des體制加密流程其 中56位,而第8、16、24、.64位8個位并未參與DES運(yùn)算,這一點(diǎn),向我們提出了一個應(yīng)用上的要求,即DES的安全性是基于除了 8,16,24,.64位外的其余56位的組合變化256才得以保證的。因此,在實際應(yīng)用中,我們應(yīng)避開使用第 8,16,24,.64位作為有效數(shù)據(jù)位,而使用其它的56位作為有效數(shù)據(jù)位,才能保證DES算法安全可靠地發(fā)揮

14、作用。如果不了解這一點(diǎn),把密 鑰Key的8,16,24,. .64位作為有效數(shù)據(jù)使用,將不能保證DES加密數(shù)據(jù)的安全性,對運(yùn)用DES來達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險,這正是DES算法在應(yīng)用上的誤 區(qū),留下了被人攻擊、被人破譯的極大隱患。 DES算法源程序/*在我測試的時候發(fā)現(xiàn)這個代碼的一個問題是 如果加密后的密文里面有00這個字節(jié)的話 解密出來的就會是亂碼,編譯環(huán)境vc6.0 vs2008 使用需注意 */ (名為schedle.h的頭文件) #include <windows.h> DWORDLONG dwlKey_PC_164= 57,49,41,33,25,17,9,

15、 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,1   三重des算法5, 7,62,54,46,38,30,22, 14,6,61,53,45,37,29, 21,13,5,28,20,12,4,0; DWORDLONG dwlKey_PC_264= 14,17,11,24,1,5, 3,28,15,6,21,10, 23,19,12,4,26,8, 16,7,27,20,13,2, 41,52,31,37,47,55, 30,40,51,45,33,48,

16、 44,49,39,56,34,53, 46,42,50,36,29,32,0; DWORDLONG dwlData_IP65= 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,33,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,0; DWORDLONG dwlData_Expansion64= 32,1,2,3,4,

17、5, 4,5,6,7,8,9, 8,9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,1,0; DWORDLONG dwlData_P33= 16,7,20,21, 29,12,28,17, 1,15,23,2   子密鑰的生成過程6, 5,18,31,10, 2,8,24,14, 32,27,3,9, 19,13,30,6, 22,11,4,25,0; DWORDLONG dwlData_FP65= 40,8,4

18、8,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, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25,0; DWORDLONG OS512= 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,13,6,2,11

19、,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4

20、,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,1   基于DES算法的RFID安全系統(tǒng)設(shè)計4,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14

21、,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, 4,11,2,14,15,0,8,13,3,1 

22、  des算法圖解2,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,1

23、1 ; (以下為主程序) #include <stdio.h> #include <string.h> #include <windows.h> #include <conio.h> #include "Schedle.h" class CShift public: DWORDLONG mask16; int step16; CShift() for(int i=0;i<16;i+) stepi=2; maski=0xc000000; step0=step1=step8=step15=1; mask0=mask1=mas

24、k8=mask15=0x8000000; ; class CDES public: CDES() m_dwlKey=0; m_dwlData=0; ConvertTableToMask(dwlKey_PC_1,64); /PrintTable(dwlKey_PC_1,7,8); ConvertTableToMask(dwlKey_PC_2,56); ConvertTableToMask(dwlData_IP,64); ConvertTableToMask(dwlData_Expansion,32); ConvertTableToMask(dwlData_FP,64); ConvertTable

25、ToMask(dwlData_P,32); Generate_S(); void PrintBit(DWORDLONG); void EncryptKey(char *); unsigned char* EncryptData(unsigned char *); unsigned char* DescryptData(unsigned char*); private: void ConvertTableToMask(DWORDLONG *,int); void Generate_S(void); void PrintTable(DWORDLONG*,int,int); DWORDLONG Pr

26、ocessByte(unsigned char*,BOOL); DWORDLONG PermuteTable(DWORDLONG,DWORDLONG*,int); void Generate_K(void); void EncryptKernel(void); DWORDLONG Generate_B(DWORDLONG,DWORDLONG*); /*For verify schedule permutation only*/ DWORDLONG UnPermuteTable(DWORDLONG,DWORDLONG*,int); /*/ DWORDLONG dwlData_S9416; CSh

27、ift m_shift; DWORDLONG m_dwlKey; DWORDLONG m_dwlData; DWORDLONG m_dwl_K17; ; void CDES:EncryptKey(char *key) printf("nOriginal Key: %s",key); m_dwlKey=ProcessByte(unsigned char*)key,TRUE); / PrintBit(m_dwlKey); m_dwlKey=PermuteTable(m_dwlKey,dwlKey_PC_1,56); / PrintBit(m_dwlKey); Generate_

28、K(); / printf("n*n"); void CDES:Generate_K(void) DWORDLONG C17,D17,tmp; C0=m_dwlKey>>28; D0=m_dwlKey&0xfffffff; for(int i=1;i<=16;i+) tmp=(Ci-1&m_shift.maski-1)>>(28-m_shift.stepi-1); Ci=(Ci-1<<m_shift.stepi-1)|tmp)&0x0fffffff; tmp=(Di-1&m_shift.maski-1

29、)>>(28-m_shift.stepi-1); Di=(Di-1<<m_shift.stepi-1)|tmp)&0x0fffffff; m_dwl_Ki=(Ci<<28)|Di; m_dwl_Ki=PermuteTable(m_dwl_Ki,dwlKey_PC_2,48); DWORDLONG CDES:ProcessByte(unsigned char *key,BOOL shift) unsigned char tmp; DWORDLONG byte=0; int i=0; while(i<8) while(*key) if(byte!=

30、0) byte<<=8; tmp=*key; if(shift) tmp<<=1; byte|=tmp; i+; key+; if(i<8) byte<<=8; i+; return byte; DWORDLONG CDES:PermuteTable(DWORDLONG dwlPara,DWOR   基于des算法的rfid安全系統(tǒng)DLONG* dwlTable,int nDestLen) int i=0; DWORDLONG tmp=0,moveBit; while(i<nDestLen) moveBit=1; if(dwl

31、Tablei&dwlPara) moveBit<<=nDestLen-i-1; tmp|=moveBit; i+; return tmp; DWORDLONG CDES:UnPermuteTable(DWORDLONG dwlPara,DWORDLONG* dwlTable,int nDestLen) DWORDLONG tmp=0; int i=nDestLen-1; while(dwlPara!=0) if(dwlPara&0x01) tmp|=dwlTablei; dwlPara>>=1; i-; return tmp; void CDES:Pri

32、ntTable(DWORDLONG *dwlPara,int col,int row) int i,j; for(i=0;i<row;i+) printf("n"); getch(); for(j=0;j<col;j+) PrintBit(dwlParai*col+j); void CDES:PrintBit(DWORDLONG bitstream) char out76; int i=0,j=0,space=0; while(bitstream!=0) if(bitstream&0x01) outi+='1' else outi+=&#

33、39;0' j+; if(j%8=0) outi+=' ' space+; bitstream=bitstream>>1; outi='0' strcpy(out,strrev(out); printf("%s *:%dn",out,i-space); void CDES:ConvertTableToMask(DWORDLONG *mask,int max) int i=0; DWORDLONG nBit=1; while(maski!=0) nBit=1; nBit<<=max-maski; maski+=n

34、Bit; void CDES:Generate_S(void) int i; int j,m,n; m=n=0; j=1; for(i=0;i<512;i+) dwlData_Sjmn=OSi; n=(n+1)%16; if(!n) m=(m+1)%4; if(!m) j+; unsigned char * CDES:EncryptData(unsigned char *block) unsigned char *EncrytedData=new unsigned char(15); printf("nOriginal Data: %sn",block); m_dwl

35、Data=ProcessByte(block,0); / PrintBit(m_dwlData); m_dwlData=PermuteTable(m_dwlData,dwlData_IP,64); EncryptKernel(); / PrintBit(m_dwlData); DWORDLONG bit6=m_dwlData; for(int i=0;i<11;i+) EncrytedData7-i=(unsigned char)(bit6&0x3f)+46; bit6>>=6; EncrytedData11='0' printf("nAft

36、er Encrypted: %s",EncrytedData); for(i=0;i<8;i+) EncrytedData7-i=(unsigned char)(m_dwlData&0xff); m_dwlData>>=8; EncrytedData8='0' return EncrytedData; void CDES:EncryptKernel(void) int i=1; DWORDLONG L17,R17,B9,EK,PSB; L0=m_dwlData>>32; R0=m_dwlData&0xffffffff; f

37、or(i=1;i<=16;i+) Li=Ri-1; Ri-1=PermuteTable(Ri-1,dwlData_Expansion,48); /Expansion R EK=Ri-1m_dwl_Ki; /E Permutation PSB=Generate_B(EK,B); /P Permutation Ri=Li-1PSB; R16<<=32; m_dwlData=R16|L16; m_dwlData=PermuteTable(m_dwlData,dwlData_FP,64); unsigned char* CDES:DescryptData(unsigned char

38、*desData) int i=1; unsigned char *DescryptedData=new unsigned char(15); DWORDLONG L17,R17,B9,EK,PSB; DWORDLONG dataPara; dataPara=ProcessByte(desData,0); dataPara=PermuteTable(dataPara,dwlData_IP,64); R16=dataPara>>32; L16=dataPara&0xffffffff; for(i=16;i>=1;i-) Ri-1=Li; Li=PermuteTable(

39、Li,dwlData_Expansion,48); /Expansion L EK=Lim_dwl_Ki; /E Permutation PSB=Generate_B(EK,B); /P Permutation Li-1=RiPSB; L0<<=32; dataPara=L0|R0; dataPara=PermuteTable(dataPara,dwlData_FP,64); / PrintBit(dataPara); for(i=0;i<8;i+) DescryptedData7-i=(unsigned char)(dataPara&0xff); dataPara&

40、gt;>=8; DescryptedData8='0' printf("nAfter Decrypted: %sn",DescryptedData); return DescryptedData; DWORDLONG CDES:Generate_B(DWORDLONG EKPara,DWORDLONG *block) int i,m,n; DWORDLONG tmp=0; for(i=8;i>0;i-) blocki=EKPara&0x3f; m=(int)(blocki&0x20)>>4; m|=blocki&

41、;0x01; n=(int)(blocki<<1)>>2; blocki=dwlData_Simn; EKPara>>=6; for(i=1;i<=8;i+) tmp|=blocki; tmp<<=4; tmp>>=4; tmp=PermuteTable(tmp,dwlData_P,32); return tmp; void main(void) CDES des; des.EncryptKey("12345678"); unsigned char *result=des.EncryptData(unsign

42、ed char*)"DemoData"); des.DescryptData(result); 1數(shù)據(jù)加密算法百科名片   數(shù)據(jù)加密算法數(shù)據(jù)加密算法(Data Encryption Algorithm,DEA)是一種對稱加密算法,很可能是使用最廣泛的密鑰系統(tǒng),特別是在保護(hù)金融數(shù)據(jù)的安全中,最初開發(fā)的DEA是嵌入硬件中的。通 常,自動取款機(jī)(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾對它擁有幾年的專利權(quán),但是在1983年已到期后,處于公有范圍中,允許在特 定條件下可以免除專利使用費(fèi)而使用。19

43、77年被美國政府正式采納。目錄DES-國際貿(mào)易術(shù)語引藥物涂層支架展開數(shù)據(jù)加密標(biāo)準(zhǔn)DES DES的原始思想可以參照二戰(zhàn)德國的恩格瑪機(jī),其基本思想大致相同。傳統(tǒng)的密碼加密都是由古代的循環(huán)移位思想而來,恩格瑪機(jī)在這個基礎(chǔ)之上進(jìn)行了擴(kuò)散模糊。但是本質(zhì)原理都是一樣的。現(xiàn)代DES在二進(jìn)制級別做著同樣的事:替代模糊,增加分析的難度。加密原理 DES 使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產(chǎn)生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過

44、程會繼續(xù)下去,但 最后一個循環(huán)不交換。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。  數(shù)據(jù)加密算法三重 DESDES 的常見變體是三重 DES,使用 168 位的密鑰對資料進(jìn)行三次加密的一種機(jī)制;它通常(但非始終)提供極其強(qiáng)大的安全性。如果三個 56 位的子元素都相同,則三重 DES 向后兼容 DES。破解方法 攻擊 DES 的主要形式被稱為蠻力的或徹底密鑰搜索,即重復(fù)嘗試各種密鑰直到有一個符合為止。如果 DES 使用 56 位的密鑰,則可能的密鑰數(shù)量是 2 的 56 次方個。隨著計算機(jī)系統(tǒng)能力的不斷發(fā)展,DES 的安全性比它剛出現(xiàn)時會弱得多,然

45、而從非關(guān)鍵性質(zhì)的實際出發(fā),仍可以認(rèn)為它是足夠的。不過 ,DES 現(xiàn)在僅用于舊系統(tǒng)的鑒定,而更多地選擇新的加密標(biāo)準(zhǔn) 高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)。 新的分析方法有差分分析法和線性分析法兩種Crackme實例分析本期Crackme用到MD5及DES兩種加密算法,難度適中。這次我們重點(diǎn)來看一下DES的加密過程及注冊算法過程。用調(diào)試器載入程序,下GegDlgItemTextA斷點(diǎn),可以定位到下面代碼,我們先來看一下整個crackme的注冊過程: 由于代碼分析太長,故收錄到光盤中,請大家對照著分析(請見光盤“code1.doc”) 從上面分析可以看出,

46、注冊過程是類似:f(機(jī)器碼,注冊碼)式的兩元運(yùn)算。機(jī)器碼是經(jīng)過md5 算法得到的中間16位值,注冊碼是經(jīng)過DES解密過程取得16位注冊碼,然后兩者比較,如相等,則注冊成功。機(jī)器碼的運(yùn)算過程可以參照上一期的MD5算法 來理解。下面重點(diǎn)來說一下注冊碼DES的運(yùn)算過程。 1、密鑰處理過程:一般進(jìn)行加解密過程都要初始化密鑰處理。我們可以跟進(jìn)004023FA CALL Crackme1.00401A40這個call,可以看到如下代碼: (省略). 00401A4D LEA ECX,DWORD PTR DS:ECX 00401A50 /MOV EDX,EAX 00401A52 |SHR EDX,3 004

47、01A55 |MOV DL,BYTE PTR DS:EDX+ESI 00401A58 |MOV CL,AL 00401A5A |AND CL,7 00401A5D |SAR DL,CL 00401A5F |AND DL,1 00401A62 |MOV BYTE PTR DS:EAX+417DA0,DL 00401A68 |INC EAX 00401A69 |CMP EAX,40 ?這里比較是否小于64 00401A6C JL SHORT Crackme1.00401A50 以上過程就是去掉密鑰各第八位奇偶位。 (省略). 00401AB0 |MOV DL,BYTE PTR DS:ECX+417

48、D9F 00401AB6 |MOV BYTE PTR DS:EAX+417BA3,DL 00401ABC |ADD EAX,4 00401ABF |CMP EAX,38 ?這里進(jìn)行密鑰變換 (省略). 00401BFF |MOVSX ECX,BYTE PTR DS:EAX+412215 00401C06 |MOV CL,BYTE PTR DS:ECX+417D9F 00401C0C |MOV BYTE PTR DS:EAX+417BA5,CL 00401C12 |ADD EAX,6 00401C15 |CMP EAX,30 ?這里產(chǎn)生48位的子密鑰 00401C18 |JL SHORT Cra

49、ckme1.00401BA0 00401C1A |MOV EAX,DWORD PTR SS:ESP+14 00401C1E |MOV EDI,EAX 00401C20 |MOV ECX,0C 00401C25 |MOV ESI,Crackme1.00417BA0 00401C2A |REP MOVS DWORD PTR ES:EDI,DWORD PTR D> 00401C2C |MOV EDI,DWORD PTR SS:ESP+10 00401C30 |ADD EAX,30 ?下一組子密鑰 00401C33 |INC EDI 00401C34 |CMP EAX,Crackme1.00417B90 ?這里進(jìn)行16次的生成子密鑰過程 00401C39 |MOV DWORD PTR SS:ESP+10,EDI (省略). 可以看到8位密鑰為:1,9,8,0,9,1,7,0 2、對數(shù)據(jù)處理的過程,跟進(jìn)004024C7 CALL Crackme1.00402050,到如下代碼: 00402072 |MOV BYTE PTR DS:EAX+417E30,DL 00402078 |INC EAX 00402079 |CMP EAX,40 ?這里取得64位數(shù)據(jù) 0040207C JL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論