DES算法實(shí)驗(yàn)報(bào)告_第1頁(yè)
DES算法實(shí)驗(yàn)報(bào)告_第2頁(yè)
DES算法實(shí)驗(yàn)報(bào)告_第3頁(yè)
DES算法實(shí)驗(yàn)報(bào)告_第4頁(yè)
DES算法實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 實(shí)驗(yàn)報(bào)告11 / 11:xxxx學(xué)號(hào):0XXXXX班級(jí):XXXXXXX日期:2013/11/*題目:DES算法實(shí)驗(yàn)一、實(shí)驗(yàn)環(huán)境1硬件配置:處理器:Inter(R) Core(TM) i5-2430M CPU 2.40GHz (4 CPUs) ,2.4GHz存:2048MB RAM2使用軟件:(1) 操作系統(tǒng):win7 旗艦版(2) 軟件工具:Microsoft Visual c+ 6.0二、實(shí)驗(yàn)涉與的相關(guān)概念或基本原理DES是一個(gè)分組密碼算法,使用64位密鑰(除去8位奇偶校驗(yàn),實(shí)際密鑰長(zhǎng)度為56位)對(duì)64比特的數(shù)據(jù)分組(二進(jìn)制數(shù)據(jù))加密,產(chǎn)生64位密文數(shù)據(jù)。DES是一個(gè)對(duì)稱密碼體制,加密和解

2、密使用同意密鑰,解密和加密使用同一算法(這樣,在硬件與軟件設(shè)計(jì)時(shí)有利于加密單元的重用)。DES的所有的性均依賴于密鑰。DES的加密過(guò)程可分為加密處理,加密變換和子密鑰生成幾個(gè)部分組成。1.加密處理過(guò)程 (1)初始置換IP。加密處理首先要對(duì)64位的明文按表1所示的初始換位表IP進(jìn)行變換。表中的數(shù)值表示輸入位被置換后的新位置。(2)加密處理。上述換位處理的輸出,中間要經(jīng)過(guò)16輪加密變換。初始置換的64位的輸出作為下一次的輸入,將64位分為左、右兩個(gè)32位,分別記為L(zhǎng)0和R0,從L0、R0到L16、R16,共進(jìn)行16輪加密變換。其中,經(jīng)過(guò)i輪處理后的點(diǎn)左右32位分別為L(zhǎng)i和Ri則可做如下定義: Li

3、=Ri-1Ri=Li-1F(Ri-1,K) 其中,F(xiàn)為F變換(3)最后換位。進(jìn)行16輪的加密變換之后,將L16和R16合成64位的數(shù)據(jù),再按照表2所示的最后換位表進(jìn)行IP-1的換位,得到64位的密文,這就是DES算法加密的結(jié)果。2.加密變換過(guò)程 64位的密鑰先由置換選擇1減少至56六位,進(jìn)行循環(huán)左移,然后通過(guò)置換選擇2減少至48位。而通過(guò)擴(kuò)展運(yùn)算將32位按表3擴(kuò)展換位表擴(kuò)展為48位的右半部分通過(guò)異或操作和48位的密鑰結(jié)合,并分成6位的8個(gè)分組,通過(guò)8個(gè)S-盒將這48位替代成新的32位數(shù)據(jù)。按此進(jìn)行,輸出32位,再按照表4 換位表P進(jìn)行變換,這樣就完成了F(R,K)的變換。3.子密鑰生成過(guò)程 密

4、鑰通常表示為64位的自然數(shù),首先通過(guò)壓縮換位Key_Exchange去掉每個(gè)字節(jié)的第8位,用作奇偶校驗(yàn)。因此,密鑰去掉第8、16、2464位減至56位,所以實(shí)際密鑰長(zhǎng)度為56位。而每輪要生成48位的子密鑰。輸入的64位密鑰,首先通過(guò)壓縮換位得到56位的密鑰,每層分成兩部分,一部分28位為C0,一部分為D0。C0和D0依次進(jìn)行循環(huán)左移操作生成了C1和D1,將C1和D1合成56位,再通過(guò)壓縮換位Compression輸出48位的子密鑰K1,再將C1和D1進(jìn)行循環(huán)左移和Compression壓縮換位,得到子密鑰K2以此類推,得到16個(gè)子密鑰。密鑰壓縮換位表如表5表6所示。在產(chǎn)生子密鑰的過(guò)程中左移次數(shù)

5、如表7所示。4.解密處理過(guò)程 從密文到明文的解密過(guò)程可采用與加密完全一樣的算法。不過(guò)解密要用加密的逆變換,就是把上面的最后換位表和初始換位表完全倒過(guò)來(lái)變換。三、實(shí)驗(yàn)容流程圖:主要代碼:初始置換unsigned char Initial =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

6、, 53, 45, 37, 29, 21, 13, 5,63, 55, 47, 39, 31, 23, 15, 7;逆初始置換unsigned char Final =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, 18, 58, 26,33, 1,

7、 41, 9, 49, 17, 57, 25;擴(kuò)展變換Eunsigned char Expansion =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;P_盒置換unsigned char P_Box=16, 7, 20, 21, 29, 12, 28, 17,1, 15, 23, 26, 5, 18,

8、31, 30,2, 8, 24, 14, 32, 27, 3, 9,19, 13, 30, 6, 22, 11, 4, 25;S盒置換unsigned char S_Box8416 =/* 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,

9、0, 6, 13,/* S2 */ 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,/* S3 */10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4,2, 8,13, 7, 0, 9, 3

10、, 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, 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,

11、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

12、, 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

13、,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,/* 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

14、, 15, 12, 9,0, 3, 5, 6, 11;置換選擇1unsigned char Key_Exchange56 =57, 49, 41, 33, 25, 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;置換選擇2unsigned char Compression

15、 =14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,23, 19, 12, 4, 26, 9, 16, 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;循環(huán)左移位數(shù)unsigned char Key_Move=1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 1;產(chǎn)生子密鑰int Key_Process(bool k

16、ey64,bool Sub_Key1648 ) int round ; bool temp56; Key_Transform1(key,temp); for(round=0;round<16;round+) Key_Rotate(temp,Key_Moveround) ; Key_Transform2(temp,Sub_Keyround); return 0;異或int XOR(bool KR48,bool KL48 ,int count) int i; for(i=0;i<count;i+) KRi=KLi; return 0;加密算法int DES_Encrypt(bool M

17、essage8,bool Sub_Key1648,bool Final_Result8) bool Expanded_Right48; bool Result64; int round; Char8ToBit64(Message,Result); Initial_Exchange(Result); for(round=0;round<16;round+) memcpy(Expanded_Right,Result+32,32); M_Expand(Expanded_Right); XOR(Expanded_Right,Sub_Keyround,48); S_function(Expande

18、d_Right); P_function(Expanded_Right); XOR(Result,Expanded_Right,32); if(round!=15) Swap(Result,Result+32); Final_Exchange(Result); Bit64ToChar8(Result,Final_Result); return 0;解密算法int DES_Decrypt(bool Final_Result8,bool Sub_Key1648,bool Message8) bool Expanded_Right48; bool Result64; int round; Char8

19、ToBit64(Final_Result,Result); Initial_Exchange(Result); for(round=15;round>=0;round-) memcpy(Expanded_Right,Result+32,32); M_Expand(Expanded_Right); XOR(Expanded_Right,Sub_Keyround,48); S_function(Expanded_Right); P_function(Expanded_Right); XOR(Result,Expanded_Right,32); if(round!= 0) Swap(Resul

20、t,Result+32); Final_Exchange(Result); Bit64ToChar8(Result,Message); return 0;加密文件int DES_EncryptFile(char *Final_Result) FILE *input,*output; int count; unsigned name30; unsigned char key64; bool InputBlock8,OutputBlock8,keyBlock8; bool bKey64; bool Sub_Key1648; printf("輸入文件名n"); scanf(&qu

21、ot;%s",name); printf("輸入密鑰n"); scanf("%s",key); getchar(); if(input=fopen(name,"rb") = NULL) return 0; if(output=fopen(Final_Result,"wb") = NULL) return 0; memcpy(keyBlock,key,8); Char8ToBit64(keyBlock,bKey); Key_Process(bKey,Sub_Key); while(!feof(input)

22、if(count=fread(InputBlock,sizeof(char),8,input) = 8) DES_Encrypt(InputBlock,Sub_Key,OutputBlock); fwrite(OutputBlock,sizeof(char),8,output); if(count) memset(InputBlock+ count,'0',7 - count); InputBlock7 = 8 - count; DES_Encrypt(InputBlock,Sub_Key,OutputBlock); fwrite(OutputBlock,sizeof(char

23、),8,output); fclose(input); fclose(output); return 1;解密文件int DES_DecryptFile(char *Message) FILE *input, *output; int count,times = 0; long fileLen; unsigned name30; unsigned char key64; bool inputBlock8,outputBlock8,keyBlock8; bool bKey64; bool Sub_Key1648; printf("輸入文件名n"); scanf("%s",name); printf("輸入密鑰n"); scanf("%s",key); getchar(); if(out

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論