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

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)一對(duì)稱密碼算法DES一、實(shí)驗(yàn)?zāi)康耐ㄟ^用DES算法對(duì)實(shí)際的數(shù)據(jù)進(jìn)行加密和解密來深刻了解DES的運(yùn)行原理。二、實(shí)驗(yàn)環(huán)境運(yùn)行Windows或Linux操作系統(tǒng)的PC機(jī),具有g(shù)cc(Linux)、VC(Windows)等C語言編譯環(huán)境。三、實(shí)驗(yàn)報(bào)告要求〔1〕使用附錄提供的程序?qū)σ粋€(gè)文件進(jìn)行加密和解密,提交程序代碼和執(zhí)行結(jié)果。〔2〕使用附錄提供的程序?qū)斎氲氖M(jìn)制數(shù)加密〔把輸入的字符轉(zhuǎn)化成整數(shù)。例如,輸入兩個(gè)字符1F,轉(zhuǎn)化成二進(jìn)制數(shù)000lllll〕,比擬輸入和輸出。當(dāng)把輸入的數(shù)改變一個(gè)位時(shí)〔如把1F變?yōu)?E〕,比擬輸出的變化,并說明原因。四、實(shí)驗(yàn)內(nèi)容和步驟〔1〕使用附錄提供的程序?qū)σ粋€(gè)文件進(jìn)行加密和解密,程序代碼和執(zhí)行結(jié)果如下所示。程序代碼:intmain(intargc,char*argv[]){ //定義一個(gè)文件輸入流類對(duì)象infile ifstreaminfile("Arthas.txt",ios::in); if(infile==0){ cout<<"出錯(cuò)啦?。?<<endl; exit(1); } //定義一個(gè)文件輸出流類對(duì)象outfile ofstreamoutfile("encreption.txt",ios::out); if(outfile==0){ cout<<"錯(cuò)啦!"<<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<<"出錯(cuò)啦??!"<<endl; exit(1); } ofstreamoutfile1("encreption1.txt",ios::out); if(outfile1==0){ cout<<"錯(cuò)啦!"<<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ù)。例如,輸入兩個(gè)字符1F,轉(zhuǎn)化成二進(jìn)制數(shù)000lllll〕,比擬輸入和輸出。當(dāng)把輸入的數(shù)改變一個(gè)位時(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<<"出錯(cuò)啦"<<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<<"請(qǐng)輸入兩個(gè)十六進(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)就算是只相差一個(gè)位,但是他們的密文完全沒有規(guī)律可循,這就保證了數(shù)據(jù)加密的可靠性,至于這樣的原因DE

溫馨提示

  • 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. 人人文庫網(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)論