對(duì)稱密碼算法DES_第1頁
對(duì)稱密碼算法DES_第2頁
對(duì)稱密碼算法DES_第3頁
對(duì)稱密碼算法DES_第4頁
對(duì)稱密碼算法DES_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)二 對(duì)稱密碼算法DES一、實(shí)驗(yàn)?zāi)康模?1通過實(shí)驗(yàn),讓學(xué)生掌握典型的加密算法的軟件實(shí)現(xiàn)方法,對(duì)加密原理有更深入的認(rèn)識(shí)。二、實(shí)驗(yàn)要求 學(xué)生按照以下各個(gè)實(shí)驗(yàn)步驟的要求,通過查閱相關(guān)的資料,經(jīng)過調(diào)查分析,掌握計(jì)算機(jī)對(duì)稱加密算法DES實(shí)現(xiàn)等,培養(yǎng)學(xué)生分析問題和解決問題的能力。學(xué)生按照實(shí)驗(yàn)步驟的要求完成并提交分析論文。三、實(shí)驗(yàn)學(xué)時(shí) 4學(xué)時(shí)四、實(shí)驗(yàn)環(huán)境 硬件設(shè)備:計(jì)算機(jī)、局域網(wǎng) 系統(tǒng)軟件:Windows系統(tǒng) 支撐軟件:C或Visual C+等編譯環(huán)境五、實(shí)驗(yàn)內(nèi)容 根據(jù)教材并上網(wǎng)查找資料,完成計(jì)算機(jī)對(duì)稱加密算法DES實(shí)現(xiàn),具體要求如下: 1.DES加解密軟件調(diào)試通過2.利用DES對(duì)某一數(shù)據(jù)文件進(jìn)行單次加密

2、和解密操作。3.界面簡(jiǎn)潔、友好,便于操作。 驗(yàn)收要求:驗(yàn)機(jī)通過,并提交實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告包括下列若干項(xiàng):1、DES的加密、解密算法流程框圖 2、DES加密系統(tǒng)關(guān)鍵模塊的實(shí)現(xiàn)(加必要代碼注釋) 3、DES加密前后的明文與密文數(shù)據(jù)加密標(biāo)準(zhǔn)DESDES 使用一個(gè) 56 位的密鑰以及附加的 8 位奇偶校驗(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)。攻擊 DES 的主要形式被

3、稱為蠻力的或徹底密鑰搜索,即重復(fù)嘗試各種密鑰直到有一個(gè)符合為止。如果 DES 使用 56 位的密鑰,則可能的密鑰數(shù)量是 2 的 56 次方個(gè)。隨著計(jì)算機(jī)系統(tǒng)能力的不斷發(fā)展,DES 的安全性比它剛出現(xiàn)時(shí)會(huì)弱得多,然而從非關(guān)鍵性質(zhì)的實(shí)際出發(fā),仍可以認(rèn)為它是足夠的。不過 ,DES 現(xiàn)在僅用于舊系統(tǒng)的鑒定,而更多地選擇新的加密標(biāo)準(zhǔn) 高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)。 DES 的常見變體是三重 DES,使用 168 位的密鑰對(duì)資料進(jìn)行三次加密的一種機(jī)制;它通常(但非始終)提供極其強(qiáng)大的安全性。如果三個(gè) 56 位的子元素都相同,則三重 DES 向后兼容 DE

4、S。I由于DES是加(解)密64位明(密)文,即為8個(gè)字節(jié)(8*8=64),可以據(jù)此初步判斷這是分組加密,加密的過程中會(huì)有16次循環(huán)與密鑰置換過程,據(jù)此可以判斷有可能是用到DES密碼算法,更精確的判斷還得必須懂得一點(diǎn)DES的加密過程。DES算法的安全性一.安全性比較高的一種算法,目前只有一種方法可以破解該算法,那就是窮舉法.二.采用64位密鑰技術(shù),實(shí)際只有56位有效,8位用來校驗(yàn)的.譬如,有這樣的一臺(tái)PC機(jī)器,它能每秒計(jì)算一百萬次,那么256位空間它要窮舉的時(shí)間為2285年.所以這種算法還是比較安全的一種算法.TripleDES。該算法被用來解決使用 DES 技術(shù)的 56 位時(shí)密鑰日益減弱的強(qiáng)

5、度,其方法是:使用兩個(gè)獨(dú)立密鑰對(duì)明文運(yùn)行 DES 算法三次,從而得到 112 位有效密鑰強(qiáng)度。TripleDES 有時(shí)稱為 DESede(表示加密、解密和加密這三個(gè)階段)。功能: 實(shí)現(xiàn)DES加密算法的加密解密功能des算法的實(shí)現(xiàn)代碼 能夠?qū)崿F(xiàn)56位或56*n密鑰的des算法,可以通過該程序提供的接口 進(jìn)行數(shù)據(jù)的加密,保證數(shù)據(jù)在傳送過程的安全性 DES的加密、解密算法流程框圖加密 過程從文件M中讀取數(shù)據(jù)到網(wǎng)絡(luò)中中加密密鑰與明文逐行異或運(yùn)算生成密文產(chǎn)生初始隨機(jī)種子送入網(wǎng)絡(luò),產(chǎn)生加密密鑰判斷明文是否結(jié)束將加密密鑰經(jīng)發(fā)散函數(shù)處理生產(chǎn)下一個(gè)隨機(jī)種子將初始隨機(jī)種子保存在文件中結(jié)束否是解密 過程從文件M中讀

6、取數(shù)據(jù)到網(wǎng)絡(luò)中中加密密鑰與明文逐行異或運(yùn)算生成密文從文件M中讀取初始隨機(jī)種子送入網(wǎng)絡(luò),產(chǎn)生解密密鑰判斷密文是否結(jié)束將解密密鑰經(jīng)發(fā)散函數(shù)處理生產(chǎn)下一個(gè)隨機(jī)種子將初始隨機(jī)種子保存在文件中結(jié)束否是C語言 DES源碼:i nclude i nclude i nclude i nclude i nclude i nclude des.h#define SUCCESS 0 #define FAIL -1#define READFILESIZE 512#define WZ_COMMEND_NUM 4#define WZUSEHELPNUM 19#define DESONE 1#define DESTHREE

7、 2#define DESMULTI 3INT8 *WZ_Commend_Help =基于DES的加密解密工具v1.0 ,/*0*/追求卓越,勇于創(chuàng)新 ,-著者 : 吳真- , ;INT8 *WZ_USE_HELP=輸入5+n個(gè)參數(shù):,t1.可執(zhí)行文件名 *.exe,t2.操作類型 1:一層加密;2:一層解密;,tt13:N層單密鑰加密;23:N層單密鑰解密;,tt39:N層多密鑰加密;49:N層多密鑰解密,t3.讀出數(shù)據(jù)的文件名*.txt,t4.寫入數(shù)據(jù)的文件名*.txt,t5.密鑰(8字節(jié)例如:wuzhen12),t6.N層單密鑰的層數(shù)或者.二層加密|解密密鑰,t7.三層加密|解密密鑰,t

8、8. .,tN.N層加密|解密密鑰,t 例1: des 1 1.txt 2.txt ,t : des 2 2.txt 3.txt ,t 例2: des 13 1.txt 2.txt tiantian 5,t : des 23 2.txt 3.txt tiantian 5,t 例3: des 39 1.txt 2.txt tiantian gaoxinma,t : des 49 2.txt 3.txt tiantian gaoxinma,*;INT32 hextofile( ULONG8 *buf ,FILE *writefile, ULONG32 length);/*以16進(jìn)制寫入文件*/IN

9、T32 encodehex(ULONG8 *tobuf,ULONG8 *frombuf,ULONG32 len);/*16進(jìn)制解碼*/INT32 file_enc(FILE *readfile,FILE *writefile, ULONG8 *key,ULONG32 keynum, ULONG8 *superkey,ULONG32 n_superkey, ULONG8 flag);INT32 file_dec(FILE *readfile,FILE *writefile, ULONG8 *key,ULONG32 keynum, ULONG8 *superkey,ULONG32 n_superk

10、ey, ULONG8 flag);void wz_print_help();INT32 main(INT32 argc,INT8 *argv)INT8 *FILENAME1,*FILENAME2; FILE *fp, *fp2;ULONG8 *key ;ULONG8 *superkey ;/*n層加密解密密鑰*/ULONG8 n_superkey ;ULONG32 num; if ( argc = 5 & (atoi(argv1) = 39 | atoi(argv1) = 49 ) )n_superkey = argc - 4 ;superkey = ( INT8 *)calloc(1, n_

11、superkey*sizeof( void *) ) ;for ( num = 0 ; num 0)else if ( argc = 5 & ( atoi(argv1) = 1 | atoi(argv1) = 2 )elsewz_print_help();return FAIL;FILENAME1 = argv2;FILENAME2 = argv3;if (fp= fopen(FILENAME1,rb) = NULL| (fp2 = fopen(FILENAME2,wb)=NULL)printf(Cant open filen);return FAIL; key = argv4 ;switch

12、( atoi(argv1 )case 1:/*加密*/file_enc(fp,fp2,key,0, NULL,0, DESONE);printf(n tDES 一層加密完畢,密文存于%s文件n,FILENAME2);break;case 2:file_dec(fp,fp2,key,0, NULL, 0,DESONE);printf(n tDES 一層解密完畢,密文存于%s文件n,FILENAME2);break;case 13:file_enc(fp,fp2,key,atoi(argv5),NULL,0,DESTHREE);printf(n tDES %u層單密鑰加密完畢,密文存于%s文件n,

13、atoi(argv5),FILENAME2);break;case 23:file_dec(fp,fp2,key,atoi(argv5),NULL,0,DESTHREE);printf(n tDES %u層單密鑰解密完畢,密文存于%s文件n,atoi(argv5),FILENAME2);break;case 39:file_enc(fp,fp2,NULL,0,superkey,n_superkey,DESMULTI);printf(n tDES 多密鑰加密完畢,密文存于%s文件n,FILENAME2);free(superkey);superkey = NULL;break;case 49:f

14、ile_dec(fp,fp2,NULL,0,superkey,n_superkey,DESMULTI);printf(n tDES 多密鑰加密完畢,密文存于%s文件n,FILENAME2);free(superkey);superkey = NULL;break;default:printf(請(qǐng)選擇是加密|解密 plese choose encrypt|deencryptn);break;fclose(fp);fclose(fp2);return SUCCESS;void wz_print_help()INT32 i ;printf(t);for ( i = 0 ; i 22 ; i+)pri

15、ntf(%c ,5);printf(n);for( i = 0 ; i WZ_COMMEND_NUM ; i+)printf(t%ct%s %cn,5,WZ_Commend_Helpi,5);printf(t);for ( i = 0 ; i 22 ; i+)printf(%c ,5);printf(n);for( i = 0 ; i 0 )/*如果從文件中讀出的長(zhǎng)度不等于0,那么肯定有8個(gè)字節(jié)以上的空間文件長(zhǎng)度存在最后8個(gè)字節(jié)中*/totalfilelen += filelen;memcpy( &readbufREADFILESIZE-8, (ULONG8*)&totalfilelen,4)

16、;switch(flag)case DESONE:des( readbuf,key,READFILESIZE);break;case DESTHREE:des3( readbuf, key ,keynum,READFILESIZE);break;case DESMULTI:desN( readbuf, superkey ,n_superkey,READFILESIZE);break;hextofile( readbuf, writefile,READFILESIZE );/*以16進(jìn)制形式寫入文件*/memset(readbuf,0 ,READFILESIZE);else /*filelen

17、= 0*/memcpy( &readbuf0, (ULONG8*)&totalfilelen,4);switch(flag)case DESONE:des( readbuf,key,8);break;case DESTHREE:des3( readbuf, key ,keynum,8);break;case DESMULTI:desN( readbuf, superkey ,n_superkey,8);break;hextofile( readbuf, writefile, 8);/*以16進(jìn)制形式寫入文件*/return SUCCESS;INT32 file_dec(FILE *readfi

18、le,FILE *writefile, ULONG8 *key,ULONG32 keynum, ULONG8 *superkey,ULONG32 n_superkey, ULONG8 flag)INT32 filelen = 0,readlen = 0,writelen = 0;ULONG32 totalfilelen = 0 ;/*統(tǒng)計(jì)實(shí)際的文件的長(zhǎng)度*/INT32 num = 0;ULONG8 readbufREADFILESIZE = 0 ;ULONG8 sendbufREADFILESIZE*2 = 0 ;fseek(readfile,-16,SEEK_END);/*最后16個(gè)字節(jié)的表

19、示文件長(zhǎng)度的空間*/filelen = fread( sendbuf, sizeof( INT8 ), 16, readfile );encodehex( readbuf,sendbuf,8);switch(flag)case DESONE:Ddes( readbuf,key,8);break;case DESTHREE:Ddes3( readbuf, key ,keynum,8);break;case DESMULTI:DdesN( readbuf, superkey ,n_superkey,8);break;/*解密*/memcpy(ULONG8*)&totalfilelen, &read

20、buf0,4);/*得到文件總長(zhǎng)*/memset(readbuf,0 ,8);memset(sendbuf,0 ,16); num = totalfilelen/READFILESIZE;/*有幾個(gè)READFILESIZE組*/totalfilelen %= READFILESIZE;fseek(readfile,0,SEEK_SET);/*跳到文件頭*/while(num-)filelen = fread( sendbuf, sizeof( INT8 ), READFILESIZE*2, readfile );encodehex( readbuf,sendbuf,READFILESIZE);

21、switch(flag)case DESONE:Ddes( readbuf,key,READFILESIZE);break;case DESTHREE:Ddes3( readbuf, key ,keynum,READFILESIZE);break;case DESMULTI:DdesN( readbuf, superkey ,n_superkey,READFILESIZE);break;writelen = fwrite(readbuf, sizeof( INT8 ), READFILESIZE, writefile); memset(readbuf,0 ,READFILESIZE);mems

22、et(sendbuf,0 ,READFILESIZE*2);if ( totalfilelen 0 )/*最后一塊有多余的元素*/filelen = fread( sendbuf, sizeof( INT8 ), READFILESIZE*2, readfile );encodehex( readbuf,sendbuf,READFILESIZE);switch(flag)case DESONE:Ddes( readbuf,key,READFILESIZE);break;case DESTHREE:Ddes3( readbuf, key ,keynum,READFILESIZE);break;c

23、ase DESMULTI:DdesN( readbuf, superkey ,n_superkey,READFILESIZE);break;writelen = fwrite(readbuf, sizeof( INT8 ), totalfilelen, writefile);memset(readbuf,0 ,READFILESIZE);memset(sendbuf,0 ,READFILESIZE*2);return SUCCESS;INT32 hextofile( ULONG8 *buf ,FILE *writefile, ULONG32 length)ULONG32 writelen =

24、0 ;/*以16進(jìn)制形式寫入文件*/ while( writelen length)if(bufwritelen = 0)fprintf( writefile, %x, 0 );fprintf( writefile, %x, 0 );else if (bufwritelen 0x10)fprintf( writefile, %x, 0 );fprintf( writefile, %x, bufwritelen );elsefprintf( writefile, %x, bufwritelen );writelen+;return SUCCESS;INT32 encodehex(ULONG8 *tobuf,ULONG8 *frombuf,ULONG32 len)ULONG8 *readfirst = frombuf ;ULONG8 *readend = &frombuf1 ;INT8 *s;ULONG8 y2 ; ULONG

溫馨提示

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

評(píng)論

0/150

提交評(píng)論