廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實驗報告-對稱密碼算法DES_第1頁
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實驗報告-對稱密碼算法DES_第2頁
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實驗報告-對稱密碼算法DES_第3頁
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實驗報告-對稱密碼算法DES_第4頁
廣東工業(yè)大學(xué)網(wǎng)絡(luò)工程實驗報告-對稱密碼算法DES_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

wordword文檔可自由復(fù)制編輯一.實驗?zāi)康耐ㄟ^用DES算法對實際的數(shù)據(jù)進行加密和解密來深刻了解DES的運行原理。二.實驗軟件環(huán)境運行Windows或Linux操作系統(tǒng)的PC機,具有g(shù)cc(Linux)、VC(Windows)等C語言編譯環(huán)境。三.實驗內(nèi)容算法分析根據(jù)所提供的程序分析DESDES程序包括一個頭文件和一個實現(xiàn)DES算法的CDES程序通過宏定義可選擇小代碼模式smallDES算法中的很多加密解密時主要用到下面5個函數(shù)。(l)intdes_setup(constunsignedchar*key,intkeylen,intnum_rounds,des_key*skey)函數(shù)名稱:密鑰生成函數(shù)。參數(shù)說明:key是一個指針,指向用戶輸入的初始密鑰。keylen是輸入密鑰的長度,以字節(jié)為單位。num_rounds是加密輪數(shù),當(dāng)輸入0時,使用算法默認的輪數(shù)。skey當(dāng)密鑰生成時,返回值為CRYPT_O(0,結(jié)果保留在Skey指向的結(jié)構(gòu)體。des_key的定義如下:typedefstructdes_key{ulong32ek[32],dk[32];}des_key結(jié)構(gòu)體里的ek存儲加密時用的子密鑰,dk存儲解密時用的子密鑰。232483248864888。這樣做是為了加密時可以把擴展和查表運算結(jié)合起來。voiddes_ecb_encrypt(constunsignedchar*pt,unsignedchar*ct,des_key*key)函數(shù)名稱:加密函數(shù)。參數(shù)說明;pt是指向待加密的明文數(shù)組的指針。ct是指向存儲加密結(jié)果的指針。key加密成功時,返回。voiddes_ecb_decrypt(constunsignedcharchar*pt,des_key*key)函數(shù)名稱:解密函數(shù)。參數(shù)說明:ct是指向待解密的密文數(shù)組的指針。pt是指向存儲解密結(jié)果的指針。key是調(diào)用密鑰生成函數(shù)后存儲每一輪子密鑰的結(jié)構(gòu)體變量。解密成功時,返回CRYPT_OK。加密和解密時,pt和ct可以指向同一塊內(nèi)存。int函數(shù)名稱:測試函數(shù)。這個函數(shù)用來對加密算法進行測試這個函數(shù)還可以用來測試函數(shù)的運行時間。nitdes_keysize(int函數(shù)名稱:密鑰長度檢驗函數(shù)。參數(shù)說明:desired_keysize是使用者所想要的密鑰長度。當(dāng)密鑰長度小于所需密鑰長度時,返回值為CRYPT_INVALID_KEYSIZE,否則,desired_keysize指向的變量被置為8。使用實例分析#include"des.h"intmain(intargc,char*argv[]){unsignedcharpt[9]="abcdefg",ct[9],key[8]={'a','b','c','d','a','b','c','d'};des_keyskey;pt[9l=ct[9]='\0';des_setup(key,8,0,&skey);des_ecb_encrypt(pt.ct,&skey);des_ecb_decrypt(ct.pt,&skey);printf("%s\n",pt);prinif("%s\n",ct);system("PAUSE");retun0;}8Byteptpt和ct9。四、實驗結(jié)果:(1)使用附錄提供的程序?qū)σ粋€文件進行加密和解密,提交程序代碼和執(zhí)行結(jié)果。①修改程序,添加main函數(shù),使程序能夠正常運行,并作修改如下:intmain(intargc,char*argv[]){intchoice;system("colorf0");cout<<"╭═══════════╮"<<endl;cout<<"║選項: cout<<"║1.文件加密2.文件解密║"<<endl;cout<<"╰═══════════╯"<<endl;cout<<"選擇:";cin>>choice;cout<<endl;if(choice==1){chara;charifn[10];charofn[10];//文件名cout<<"輸入需要加密的文件名:"<<endl;cin>>ifn;cout<<cin>>ofn;ifstreamf1(ifn); //從文件中讀ofstreamf2(ofn); //寫到到文件unsignedcharpt[9],ct[9],nt[50],mt[9],key[8]={'a','b','c','d','a','b','c','d'};symmetric_keyskey;intn=0;intnn=0;while(!f1.eof()){a=f1.get();nt[n]=a;n++;}nt[n]='\0';for(intcount=0;count<=(n-1)/8;count++){mt[8]='\0';ct[8]='\0';pt[8]='\0';for(inti=0;i<8;i++){pt[i]=nt[nn];nn++;}des_setup(key,8,0,&skey);des_ecb_encrypt(pt,ct,&skey);for(intm=0;m<8;m++)f2.put(ct[m]);}cout<<"加密完成!"<<endl;f1.close();f2.close();system("PAUSE");}elseif(choice==2){chara;charifn[10];charofn[10];//文件名cout<<cin>>ifn;cout<<cin>>ofn;ifstreamf1(ifn); //從文件中讀ofstreamf2(ofn); //寫到到文件unsignedcharpt[9],ct[9],nt[50],mt[9],key[8]={'a','b','c','d','a','b','c','d'};symmetric_keyskey;intn=0;intnn=0;while(!f1.eof()){a=f1.get();nt[n]=a;n++;}nt[n]='\0';for(intcount=1;count<=(n-1)/8;count++){mt[8]='\0';ct[8]='\0';pt[8]='\0';for(inti=0;i<8;i++){ct[i]=nt[nn];nn++;ct[8]='\0';}des_setup(key,8,0,&skey);des_ecb_decrypt(ct,pt,&skey);for(intm=0;m<8;m++){if(pt[m]==255)break;f2.put(pt[m]);}}cout<<f1.close();f2.close();}elseif(choice==3){unsignedcharpt[50]="ilovec",ct[50],mt[50],key[8]={'a','b','c','d','a','b','c','d'};symmetric_keyskey;pt[8]=ct[8]='\0';mt[8]='\0';des_setup(key,8,0,&skey);des_ecb_encrypt(pt,ct,&skey);printf("%s\n",pt);printf("%s\n",ct);des_ecb_decrypt(ct,mt,&skey);printf("%s\n",ct);printf("%s\n",mt);}elsecout<<return0;}②運行結(jié)果:初始文件:123.txt對123.txt進行加密加密后文件:321.txt再對經(jīng)過加密的文件321.txt解密{{word文檔可自由復(fù)制編輯解密后文件:111.txt(轉(zhuǎn)化成二進制數(shù)000llll,比較輸入和輸出。當(dāng)把輸入的數(shù)改變一個位時(如把1F變?yōu)?并說明原因。①程序修改如下:intmain(){//生成密鑰unsignedcharkey[8]={'a','b','c','d','a','b','c','d'};des_keyskey;des_setup(key,8,0,&skey);cout<<"\n加密前輸入原文:";stringbufferString1;voidinputData(string&input);inputData(bufferString1);//加密數(shù)據(jù)stringbufferString2;voidencodeHexadecimal(string&input,string&output,des_key&skey);encodeHexadecimal(bufferString1,bufferString2,skey);//輸出加密數(shù)據(jù)cout<<"\noutputData(bufferString2);//解密數(shù)據(jù)voiddecodeHexadecimal(string&input,string&output,des_key&skey);decodeHexadecimal(bufferString2,bufferString1,skey);//輸出解密數(shù)據(jù)cout<<"\n解密后輸出原文:";outputData(bufferString1);return0;}//輸入16進制數(shù)據(jù),轉(zhuǎn)換為按字節(jié)存儲的字符串,即待加密的數(shù)據(jù)voidinputData(string&input)for(chartempChar1=cin.get();tempChar1!=10;tempChar1=cin.get()){charascToHexadecimal(charasc);tempChar1=ascToHexadecimal(tempChar1)<<4;chartempChar2=cin.get();if(tempChar2==10){tempChar2=48;input+=ascToHexadecimal(tempChar2)+tempChar1;return;}input+=ascToHexadecimal(tempChar2)+tempChar1;}}//將需要輸出的數(shù)據(jù)轉(zhuǎn)換為16進制數(shù)并輸出voidoutputData(string&output){for(inti=0;i<output.length();i++){charhexadecimalToAsc(charhexadecimal);cout<<hexadecimalToAsc(output[i]>>4&0x0f);cout<<hexadecimalToAsc(output[i]&0x0f);}cout<<endl;}//用DES算法加密input中的數(shù)據(jù),存放在output中voidencodeHexadecimal(string&input,string&output,des_key&skey){for(inti=0;i<input.length();i+=8){charbufferChar1[9],bufferChar2[9];for(intj=0;j<8;j++){if(i+j<input.length()){}else{}

bufferChar1[j]=input[i+j];bufferChar1[j]=0;bufferChar2[j]=0;}bufferChar1[8]=bufferChar2[8]=0;des_ecb_encrypt((unsignedchar*)bufferChar1,(unsignedchar*)bufferChar2,&skeyfor( j=0;j<8&&bufferChar2[j];j++){output+=bufferChar2[j];}}}//用DES算法解密input中的數(shù)據(jù),存放在output中voiddecodeHexadecimal(string&input,string&output,des_key&skey){output="";for(inti=0;i<input.length();i+=8)wordword文檔可自由復(fù)制編輯charbufferChar1[9],bufferChar2[9];for(intj=0;j<8;j++){if(i+j<input.length()){}else{}

bufferChar1[j]=input[i+j]

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論