对称密码算法DES_第1页
对称密码算法DES_第2页
对称密码算法DES_第3页
对称密码算法DES_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一对称密码算法DES一、实验目的通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。二、实验环境运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。三、实验报告要求〔1〕使用附录提供的程序对一个文件进行加密和解密,提交程序代码和执行结果。〔2〕使用附录提供的程序对输入的十六进制数加密〔把输入的字符转化成整数。例如,输入两个字符1F,转化成二进制数000lllll〕,比拟输入和输出。当把输入的数改变一个位时〔如把1F变为1E〕,比拟输出的变化,并说明原因。四、实验内容和步骤〔1〕使用附录提供的程序对一个文件进行加密和解密,程序代码和执行结果如下所示。程序代码: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;}程序执行结果:例如plaintext.txt存放的明文为:加密后的密文为:解密后的明文为:〔2〕使用附录提供的程序对输入的十六进制数加密〔把输入的字符转化成整数。例如,输入两个字符1F,转化成二进制数000lllll〕,比拟输入和输出。当把输入的数改变一个位时〔如把1F变为1E〕,比拟输出的变化,并说明原因。程序: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<<"请输入两个十六进制数:"<<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<<"还想继续吗?是的话按任何键继续,否那么输入N,结束"<<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;}程序输出结果如下列图所示:可以发现就算是只相差一个位,但是他们的密文完全没有规律可循,这就保证了数据加密的可靠性,至于这样的原因DE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论