Diffie-Hellman密钥交换综合实验报告.docx

上传人:b**** 文档编号:14647659 上传时间:2023-06-25 格式:DOCX 页数:12 大小:80.04KB
下载 相关 举报
Diffie-Hellman密钥交换综合实验报告.docx_第1页
第1页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第2页
第2页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第3页
第3页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第4页
第4页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第5页
第5页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第6页
第6页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第7页
第7页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第8页
第8页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第9页
第9页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第10页
第10页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第11页
第11页 / 共12页
Diffie-Hellman密钥交换综合实验报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Diffie-Hellman密钥交换综合实验报告.docx

《Diffie-Hellman密钥交换综合实验报告.docx》由会员分享,可在线阅读,更多相关《Diffie-Hellman密钥交换综合实验报告.docx(12页珍藏版)》请在冰点文库上搜索。

Diffie-Hellman密钥交换综合实验报告.docx

(网络安全方案设计基础)实验报告

#代码可运行

时间:

2021年5月12日1-2节地点:

软件实验室

姓名

班级

学号

指导教师

实验成绩

小李

物联网18-1

180*******

***

实验名称

Diffie-Hellman密钥交换算法

实验目的

1、了解和掌握Diffie-Hellman算法原理及过程;

2、通过密钥交换算法实现对称加解密密钥的保密传输;

3、能够编写代码实现Diffie-Hellman算法,并实现数据保密传输。

实验内容

1、编写Diffie-Hellman程序,协商出用于收、发双方的加、解密密钥K;

2、模拟发送端A,用协商出的密钥K,通过对称加密算法(具体算法不限)将文本文件加密;模拟接收端B,用协商出的密钥K,对接收到的密文解密。

#include

#include

/*函数声明*/

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);

intusera();

intuserb();

intXa=3,Xb=5,Ya,Yb;

/*初始化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盒*/

voidUpsetSbox(unsignedcharsbox[],unsignedcharkey[]){

intj=0,i;

unsignedchartemp;

intn;

for(i=0;i<256;i++){

n=j+(int)sbox[i]+(int)key[i];

j=n%256;

temp=sbox[i];

sbox[i]=sbox[j];

sbox[j]=temp;

}

}

/*加解密数据*/

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){

printf("%c",ch);

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=ch^k;

fputc(cipherchar,fp2);

ch=fgetc(fp1);

}

write_file("Stream.txt",data_Stream,size);

}

/*加密总函数*/

voidDataEncrypt(unsignedchar*k,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2){

intlen=strlen(k);

KeyExpansion(key,k,len);

InitSbox(sbox);

UpsetSbox(sbox,key);

printf("\n明文为:

");

DataProcess(sbox,fp1,fp2);

fclose(fp1);

fclose(fp2);

printf("\n加密成功,加密内容存于“Ciphertext.txt”中\n\n");

}

/*解密总函数*/

voidDataDecrypt(unsignedchar*k1,unsignedchar*key,unsignedchar*sbox,FILE*fp1,FILE*fp2){

intlen=strlen(k1);

KeyExpansion(key,k1,len);

InitSbox(sbox);

UpsetSbox(sbox,key);

printf("\n密文为:

");

DataProcess(sbox,fp1,fp2);

fclose(fp1);

fclose(fp2);

printf("\n解密成功,解密内容存于“Plaintext.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;

}

intmain(intargc,constchar*argv[]){

intq=11,alpha=2;

unsignedchark1res;

unsignedchark2res;

/**********RC4变量***********/

unsignedcharkey1[25]={0x00},key2[25]={0x00};

unsignedcharkey[256]={0x00};

unsignedcharsbox[256]={0x00};

FILE*fp1,*fp2;

intflag=1,i;

/*************A端操作****************/

printf("**************A端操作**************\n");

printf("q=11,a=2,Xa=3\n");

//计算Ya

Ya=pow(alpha,Xa);

Ya=Ya%q;

printf("计算得出:

Ya=(a)^Xamodq=%d\n",Ya);

printf("把Ya发送给B端.....\n");

/*************B端操作****************/

printf("**************B端操作**************\n");

printf("q=11,a=2,Xb=5\n");

//计算Yb

Yb=pow(alpha,Xb);

Yb=Yb%q;

printf("计算得出:

Yb=(a)^Xbmodq=%d\n",Yb);

printf("把Yb发送给A端.....\n\n");

/************A\B端收到数据后解密*****************/

printf("**************A\B端计算秘钥结果**************\n");

//把Yb给程序A并解出秘钥

k1res=usera(alpha,q);

//把Ya给程序B并解出秘钥

k2res=userb(alpha,q);

key1[0]=k1res;

key2[0]=k2res;

printf("\nA程序收到Yb后计算,得到秘钥Ka:

%d",k1res);

printf("\nB程序收到Ya后计算,得到秘钥Kb:

%d\n",k1res);

/*****************RC4加密********************/

/**********加密***********/

printf("\n*****************A端进行RC4加密********************\n");

fp1=fopen("Source.txt","r");

if(fp1==NULL){

printf("打开源文件失败!

\n");

getchar();

exit(0);

}

fp2=fopen("Ciphertext.txt","w");

if(fp2==NULL){

printf("打开加密后文件失败!

\n");

getchar();

exit(0);

}

printf("利用Ka加密进行加密");

DataEncrypt(key1,key,sbox,fp1,fp2);

/*********解密**********/

printf("*****************B端进行RC4解密********************\n");

fp1=fopen("Ciphertext.txt","r");

if(fp1==NULL){

printf("打开加密后文件失败!

\n");

getchar();

exit(0);

}

fp2=fopen("Plaintext.txt","w");

if(fp2==NULL){

printf("打开解密后文件失败!

\n");

getchar();

exit(0);

}

//read_file("Key.txt",key2,11);

printf("利用Kb加密进行解密");

DataDecrypt(key2,key,sbox,fp1,fp2);

/*************************************/

return0;

}

intusera(alpha,q)

{

intk1=pow(Yb,Xa);

k1=k1%q;

returnk1;

}

intuserb(alpha,q)

{

intk2=pow(Ya,Xb);

k2=k2%q;

returnk2;

}

主代码的运行结果(图1):

图1

存储明文的文件(图2):

图2

存储密文的文件(图3):

图3

存储解密结果的文件(图4)

图4

分析与

总结

通过这次实验,更深入了解了Diffie-Hellman算法Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。

这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。

然后可以用这个密钥进行加密和解密。

但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。

双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2