對稱密碼算法DES_第1頁
對稱密碼算法DES_第2頁
對稱密碼算法DES_第3頁
對稱密碼算法DES_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

實驗一對稱密碼算法DES一、實驗?zāi)康耐ㄟ^用DES算法對實際的數(shù)據(jù)進(jìn)行加密和解密來深刻了解DES的運(yùn)行原理。二、實驗環(huán)境運(yùn)行Windows或Linux操作系統(tǒng)的PC機(jī),具有g(shù)cc(Linux)、VC(Windows)等C語言編譯環(huán)境。三、實驗報告要求〔1〕使用附錄提供的程序?qū)σ粋€文件進(jìn)行加密和解密,提交程序代碼和執(zhí)行結(jié)果?!?〕使用附錄提供的程序?qū)斎氲氖M(jìn)制數(shù)加密〔把輸入的字符轉(zhuǎn)化成整數(shù)。例如,輸入兩個字符1F,轉(zhuǎn)化成二進(jìn)制數(shù)000lllll〕,比擬輸入和輸出。當(dāng)把輸入的數(shù)改變一個位時〔如把1F變?yōu)?E〕,比擬輸出的變化,并說明原因。四、實驗內(nèi)容和步驟〔1〕使用附錄提供的程序?qū)σ粋€文件進(jìn)行加密和解密,程序代碼和執(zhí)行結(jié)果如下所示。程序代碼:intmain(intargc,char*argv[]){ //定義一個文件輸入流類對象infile ifstreaminfile("Arthas.txt",ios::in); if(infile==0){ cout<<"出錯啦!!"<<endl; exit(1); } //定義一個文件輸出流類對象outfile ofstreamoutfile("encreption.txt",ios::out); if(outfile==0){ cout<<"錯啦!"<<endl; exit(1); } //定義一些變量 inti=0; unsignedcharplain[9]="12345678",encreption[9]="12345678",key[8]={'a','b','c','d','a','b','c','d'}; symmetric_keyskey; des_setup(key,8,0,&skey);// des_ecb_encrypt(pt,ct,&skey); while(infile.eof()!=1){ infile>>plain[i]; i++; if(i==8){ plain[9]='\0'; des_ecb_encrypt(plain,encreption,&skey); for(intj=0;j<8;j++) outfile<<encreption[j]; //outfile<<'\0'; i=0; } } for(;i<9;i++) plain[i]=''; plain[9]='\0'; des_ecb_encrypt(plain,encreption,&skey); for(intj=0;j<8;j++) outfile<<encreption[j]; //outfile<<'\0'; infile.close(); outfile.close();//解密 ifstreaminfile1("encreption.txt",ios::in); if(infile1==0){ cout<<"出錯啦?。?<<endl; exit(1); } ofstreamoutfile1("encreption1.txt",ios::out); if(outfile1==0){ cout<<"錯啦!"<<endl; exit(1); } while(infile1.eof()!=1){ infile1>>plain[i]; i++; if(i==8){ plain[9]='\0'; des_ecb_encrypt(plain,encreption,&skey); for(intj=0;j<8;j++) outfile1<<encreption[j]; //outfile1<<'\0'; i=0; } } for(;i<9;i++) plain[i]=''; plain[9]='\0'; des_ecb_encrypt(plain,encreption,&skey); for(j=0;j<8;j++) outfile1<<encreption[j]; //outfile1<<'\0'; infile1.close(); outfile1.close(); //cout<<"ASDF"; system("PAUSE");return0;}程序執(zhí)行結(jié)果:例如plaintext.txt存放的明文為:加密后的密文為:解密后的明文為:〔2〕使用附錄提供的程序?qū)斎氲氖M(jìn)制數(shù)加密〔把輸入的字符轉(zhuǎn)化成整數(shù)。例如,輸入兩個字符1F,轉(zhuǎn)化成二進(jìn)制數(shù)000lllll〕,比擬輸入和輸出。當(dāng)把輸入的數(shù)改變一個位時〔如把1F變?yōu)?E〕,比擬輸出的變化,并說明原因。程序:inttransfer(intoriginal){ if(original>=48&&original<=57) return(original-48); if(original>=65&&original<=70) return(original-55); if(original>=97&&original<=102) return(original-87); cout<<"出錯啦"<<endl; return0;}intmain(intargc,char*argv[]){unsignedcharpt[9]="7653211",ct[9]="qwertyu",key[8]={'a','b','c','d','a','b','c','d'}; symmetric_keyskey; intfirst,second; boolagain=true; while(again){ cout<<"請輸入兩個十六進(jìn)制數(shù):"<<endl; first=getchar(); first=transfer(first); second=getchar(); second=transfer(second); cin.clear(); pt[0]=first/8+48; first=first%8; pt[1]=first/4+48; first=first%4; pt[2]=first/2+48; first=first%2; pt[3]=first+48; pt[4]=second/8+48; second=second%8; pt[5]=second/4+48; second=second%4; pt[6]=second/2+48; second=second%2; pt[7]=second+48; pt[8]='\0'; ct[8]='\0'; des_setup(key,8,0,&skey); des_ecb_encrypt(pt,ct,&skey); printf("%s\n",pt); printf("%s\n",ct); cin.ignore(numeric_limits<streamsize>::max(),'\n'); cout<<"還想繼續(xù)嗎?是的話按任何鍵繼續(xù),否那么輸入N,結(jié)束"<<endl; chara; a=getchar(); //cout<<a; cin.clear(); if(a=='n'||a=='N') again=false; cin.ignore(numeric_limits<streamsize>::max(),'\n'); } system("PAUSE");return0;}程序輸出結(jié)果如下列圖所示:可以發(fā)現(xiàn)就算是只相差一個位,但是他們的密文完全沒有規(guī)律可循,這就保證了數(shù)據(jù)加密的可靠性,至于這樣的原因DE

溫馨提示

  • 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

提交評論