版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(网络安全方案设计基础)实验报告时间: 地点:软件实验室姓名班级学号指导教师实验成绩实验名称Diffie-Hellman密钥交换算法实验目的1、了解和掌握Diffie-Hellman算法原理及过程;2、通过密钥交换算法实现对称加解密密钥的保密传输;3、能够编写代码实现Diffie-Hellman算法,并实现数据保密传输。实验内容1、编写Diffie-Hellman程序,协商出用于收、发双方的加、解密密钥K;2、模拟发送端A,用协商出的密钥K,通过对称加密算法(具体算法不限)将文本文件加密;模拟接收端B,用协商出的密钥K,对接收到的密文解密。实验过程A端的代码#include<stdio.h>#include<math.h>intXa=3,Xb=5,Ya,Yb;/**********A端通过Yb计算Ka*************/intusera(alpha,q){intk1=pow(Yb,Xa);k1=k1%q;returnk1;}/**********B端通过Ya计算Kb*************/intuserb(alpha,q){intk2=pow(Ya,Xb);k2=k2%q;returnk2;/*函数声明*/voidInitSbox(unsignedcharsbox[]);voidKeyExpansion(unsignedcharkey[],char*k,intlen);voidUpsetSbox(unsignedcharsbox[],unsignedcharkey[]);voidDataProcess(unsignedcharsbox[],FILE*fp1,FILE*fp2);voidDataEncrypt(char*k,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2);voidDataDecrypt(char*k1,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2);intwrite_file(charname[],chardata[],intsize);intread_file(charname[],chardata[],intsize);/*初始化S盒*/voidInitSbox(unsignedcharsbox[]){inti;for(i=0;i<256;i++)sbox[i]=i;}/*密钥填充256数组刃voidKeyExpansion(unsignedcharkey[],char*k,intlen){inti;if(len<=256){for(i=0;i<256;i++)key[i]=k[i%len];}if(len>256){for(i=0;i<256;i++)key[i]=k[i];}}/*打乱S盒*/
intread_file(unsignedcharname[],chardata[],intsize){FILE*file=fopen(name,"rb+");if(file==NULL)return0;rewind(file);//移动指针到开头fread(data,sizeof(char),size,file);//读出一个数组fclose(file);return1;}intmain(intargc,constchar*argv[]){intq=11,alpha=2;intKa;unsignedcharkey1[25]={0x00},key2[25]={0x00};unsignedcharkey[256]={0x00};unsignedcharsbox[256]={0x00};FILE*fp1,*fp2;intflag=1,i;printf("A用户端\n");printf("q=11,a=2\n");//CalculatingYaYa=pow(alpha,Xa);Ya=Ya%q;printf("计算得到Ya=%d\n",Ya);printf("请输入B端的公钥Yb:");scanfC'%d",&Yb);Ka=usera(alpha,q);printf("计算得到最终公钥K=%d",Ka);key1[0]=Ka;/**********加密***********/fp1=fopen("mingwen.txt","r");if(fp1==NULL){printf("打开源文件失败!\n");getchar();exit(0);fp2=fopen("miwen.txt","w");if(fp2==NULL){printf("打开加密后文件失败!\n");getchar();exit(0);DataEncrypt(key1,key,sbox,fp1,fp2);return0;/********************************B端代码************************************/#include<stdio.h>#include<math.h>intXb=5,Ya,Yb;/*函数声明*/voidInitSbox(unsignedcharsbox[]);voidKeyExpansion(unsignedcharkey[],char*k,intlen);voidUpsetSbox(unsignedcharsbox[],unsignedcharkey[]);voidDataProcess(unsignedcharsbox[],FILE*fp1,FILE*fp2);voidDataEncrypt(char*k,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2);voidDataDecrypt(char*k1,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2);intwrite_file(charname[],chardata[],intsize);intread_file(charname[],chardata[],intsize);
/*加解密数据刃voidDataProcess(unsignedcharsbox[],FILE*fp1,FILE*fp2){//0加密,1解密inti=0,j=0,size=0;inttemp2,temp1,t;chark,cipherchar,data_Stream[100]={0x00};unsignedchartemp;charch=fgetc(fp1);while(ch!=EOF){i=(i+1)%256;temp2=j+(int)sbox[i];j=temp2%256;temp=sbox[i];sbox[i]=sbox[j];sbox[j]=temp;temp1=(int)sbox[i]+(int)sbox[j];t=temp1%256;data_Stream[size++]=k=sbox[t];cipherchar=chAk;fputc(cipherchar,fp2);ch=fgetc(fpl);printf("%c",ch);}write_file("Stream.txt",data_Stream,size);}/*解密总函数刃voidDataDecrypt(unsignedchar*k1,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2){intlen=strlen(kl);KeyExpansion(key,k1,len);InitSbox(sbox);
UpsetSbox(sbox,key);printf("\n密文为:");DataProcess(sbox,fp1,fp2);fclose(fpl);fclose(fp2);printf("\n解密成功,内容存于“jiemi.txt”中!\n\n");}/*******文件的写操作**********/intwrite_file(charname[],chardata[],intsize){FILE*file=fopen(name,"ab+");if(file==NULL)return0;fwrite(data,sizeof(char),size,file);//写入一个数组rewind(file);//移动指针到开头fclose(file);return1;}/******文件的操作*******/intread_file(unsignedcharname[],chardata[],intsize){FILE*file=fopen(name,"rb+");if(file==NULL)return0;rewind(file);//移动指针到开头fread(data,sizeof(char),size,file);//读出一个数组fclose(file);return1;}/**********B端通过Ya计算Kb*************/intuserb(alpha,q)intk2=pow(Ya,Xb);k2=k2%q;returnk2;intmain(intargc,constchar*argv[]){intq=11,alpha=2;intKb;unsignedcharkey1[25]={0x00},key2[25]={0x00};unsignedcharkey[256]={0x00};unsignedcharsbox[256]={0x00};FILE*fp1,*fp2;intflag=1,i;printf("B用户端\n");printf("q=11,a=2\n");//CalculatingYbYb=pow(alpha,Xb);Yb=Yb%q;printf("计算得到Yb=%d\n",Yb);printf("请输入A端的公钥Ya:");scanf("%d",&Ya);Kb=userb(alpha,q);printf("计算得到最终秘钥K=%d\n",Kb);key2[0]=Kb;/*********解密**********/fp1=fopen("miwen.txt","r");if(fp1==NULL){printf("打开加密后文件失败!\n");getchar();exit(0);fp2=fopen("jiemi.txt","w");if(fp2==NULL){printf("打开解密后文件失败!\n");getchar();exit(0);实图1R用户端q=1La=2计算得到Yb=10齿输入A端的公胡Ya:A用户端q=ll,a=2计算得到Ya.=8请输入B端的公钥Yb:A用户端q=llJa=2计算得到Y»=8请输入E端的公钥Yb:10计算得到最终公钥K=10明文为engChunHui加密成功,加密内容在;KmiwerLtxt"中PressanykeytocontinueB用户端q二11,a二2计算得到Yb=10诘输Xa端的公钥Ya:8十算廿到最河秘窃K=l。密文为:荏龙??u浚。鄙:0?解密成功,内容荐于"jiemi.txt”中!Pressanykeytocontinue1(图2)
存储明文的文件(图3):mingwen.ttt-记事本文件出相露回格式。查窗切努助(W|180345301B7DengChunHui图3存储密文的文件(图4):miwen.txt-记事本文件旧编辑㈤梏式⑼筐看M帮助(HJ榛臬€??U浚3\鄢!0?图4解密后的文件(图5):jiemi.tx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年瓦工承揽协议规范化样本版
- 部门工作计划集锦15篇
- 教师师德师风培训心得体会
- 5这些事我来做(教学实录)2023-2024学年统编版道德与法治四年级上册
- 2024-2025学年八年级政治上册 第四单元 我们依法享有人身权、财产 第七课 法律保护我们的权利 第1框《法律规定公民的权利和义务》教学实录 鲁教版
- 银行个人信贷业务分析报告
- 网络安全管理规范
- 《管理品牌资产》戴维·阿克著
- 2025届高考英语读后续写素材积累40-境况篇清单
- 售后客服个人工作总结15篇
- 手工花项目策划书
- 循环系统病症的临床思维
- 烟花爆竹经营
- 手消毒液使用率低品管圈课件
- 总裁办公室度工作总结
- 2023年中考语文二轮复习:标点符号 真题练习题汇编(含答案解析)
- 偏身舞蹈症的护理查房
- 抑郁障碍患者的沟通技巧课件
- 《涵洞施工技术》课件
- 护理人才梯队建设规划方案
- 考试保密培训课件教学
评论
0/150
提交评论