Diffie-Hellman密钥交换综合实验报告_第1页
Diffie-Hellman密钥交换综合实验报告_第2页
Diffie-Hellman密钥交换综合实验报告_第3页
Diffie-Hellman密钥交换综合实验报告_第4页
Diffie-Hellman密钥交换综合实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、(网络安全方案设计基础)实验报告 #代码可运行时间: 2021年 5月 12日 1-2 节 地点:软件实验室姓 名班 级学 号指导教师实验成绩小李物联网18-1180*实验名称Diffie-Hellman密钥交换算法实验目的1、了解和掌握Diffie-Hellman算法原理及过程;2、通过密钥交换算法实现对称加解密密钥的保密传输;3、能够编写代码实现Diffie-Hellman算法,并实现数据保密传输。实验内容1、编写Diffie-Hellman程序,协商出用于收、发双方的加、解密密钥K;2、模拟发送端A,用协商出的密钥K,通过对称加密算法(具体算法不限)将文本文件加密;模拟接收端B,用协商出

2、的密钥K,对接收到的密文解密。实验过程#include #include /*函数声明*/void InitSbox(unsigned char sbox); void KeyExpansion(unsigned char key, char *k, int len);void UpsetSbox(unsigned char sbox, unsigned char key);void DataProcess(unsigned char sbox, FILE *fp1, FILE *fp2);void DataEncrypt(char *k, unsigned char *key, unsign

3、ed char *sbox, FILE *fp1, FILE *fp2);void DataDecrypt(char *k1, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2);int write_file(char name,char data,int size);int read_file(char name,char data,int size);int usera();int userb();int Xa = 3, Xb = 5, Ya, Yb;/*初始化S盒*/void InitSbox(unsigned c

4、har sbox)int i;for( i = 0; i 256; i+) sboxi = i; /*密钥填充256数组*/void KeyExpansion(unsigned char key, char *k, int len)int i;if(len = 256)for( i = 0; i 256)for( i = 0; i 256; i+) keyi = ki; /*打乱S盒*/ void UpsetSbox(unsigned char sbox, unsigned char key)int j = 0,i;unsigned char temp;int n;for( i = 0; i

5、256; i+)n = j + (int)sboxi + (int)keyi;j = n % 256;temp = sboxi;sboxi = sboxj;sboxj = temp; /*加解密数据*/ void DataProcess(unsigned char sbox, FILE *fp1, FILE *fp2)/0加密,1解密int i=0, j=0,size=0;int temp2,temp1,t;char k,cipherchar,data_Stream100=0 x00;unsigned char temp;char ch = fgetc(fp1);while(ch != EOF

6、)printf(%c,ch);i = (i + 1) % 256; temp2 = j + (int)sboxi;j = temp2 % 256;temp = sboxi;sboxi = sboxj;sboxj = temp; temp1 = (int)sboxi + (int)sboxj; t = temp1 % 256;data_Streamsize+= k = sboxt; cipherchar = ch k;fputc(cipherchar, fp2);ch = fgetc(fp1);write_file(Stream.txt,data_Stream,size); /*加密总函数*/v

7、oid DataEncrypt(unsigned char *k, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) int len = 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”中nn); /*解密总函

8、数*/ void DataDecrypt(unsigned char *k1, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) int len = 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”中!nn);

9、/*文件的写操作*/int write_file(char name,char data,int size) FILE *file=fopen(name,ab+);if(file=NULL) return 0; fwrite(data,sizeof(char),size,file);/写入一个数组 rewind(file);/移动指针到开头 fclose(file); return 1;/*文件的读操作*/int read_file(unsigned char name,char data,int size) FILE *file=fopen(name,rb+);if(file=NULL) r

10、eturn 0; rewind(file);/移动指针到开头 fread(data,sizeof(char),size,file);/读出一个数组 fclose(file); return 1;int main(int argc, const char * argv) int q = 11, alpha = 2; unsigned char k1res ; unsigned char k2res ;/*RC4变量*/unsigned char key125=0 x00,key225=0 x00;unsigned char key256 = 0 x00;unsigned char sbox256

11、 = 0 x00;FILE *fp1, *fp2; int flag = 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)Xa mod q = %dn,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)

12、Xb mod q = %dn,Yb);printf(把Yb发送给A端.nn); /*AB端收到数据后解密*/printf(*AB端计算秘钥结果*n); /把Yb给程序A并解出秘钥 k1res = usera(alpha,q);/把Ya给程序B并解出秘钥 k2res = userb(alpha,q);key10=k1res;key20=k2res; printf(nA程序收到Yb后计算,得到秘钥Ka:%d,k1res); printf(nB程序收到Ya后计算,得到秘钥Kb:%dn,k1res);/*RC4加密*/*加密*/ printf(n*A端进行RC4加密*n); fp1 = fopen(S

13、ource.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(打开加

14、密后文件失败!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);/*/return 0;int usera(alpha,q) int k1 = pow(Yb, Xa); k1 = k1 % q; return k1;int userb(alpha,q) int k2 = pow(Ya, Xb); k2 = k2 % q; return k2;实验结果主代码的运行结果(图1):图1存储明文的文件(图2):图2存储密文的文

温馨提示

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

评论

0/150

提交评论