版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 匀变速直线运动的研究 课件-2026-2027学年高一上学期物理教科版必修第一册
- 呕吐的中医辨证与护理要点
- 2026届扬州市中考化学仿真试卷(含答案解析)
- 甘肃省天水市2026年中考化学猜题卷(含答案解析)
- 初三物理(科学)《杠杆:原理、应用与科学思维》教学设计
- 基本控制电路试题及答案
- 河南艺考听写试题及答案
- 北京版三年级下册数学《吨的认识》单元整体教学设计
- 初中八年级化学 实验探究核心知识清单
- 人教版八年级上册第二单元现代文全套备课资料(教案+导学案)
- 2026重庆铜梁区社会招聘社区专职工作人员22人笔试备考试题及答案详解
- 2026年人教大同版(新教材)小学英语四年级下册期末学情测试卷及答案
- 哈尔滨工业大学2026年强基计划综合面试+体质测试模拟试题及答案解析
- 2026年小学生暑期安全教育课件(详细版)
- 2026国家药品监督管理局南方医药经济研究所编外聘用制人员招聘1人(广东)考试参考试题及答案解析
- 人教版PEP小学四年级下册英语全册单元测试题
- 2026年国家开放大学电大本科《高级财务会计》期末题库检测试卷【考点梳理】附答案详解
- 中央电视台社招笔试题
- 生殖与不孕不育工作制度
- 吉安市吉安市2025-2026学年第二学期四年级语文期末考试卷(部编版含答案)
- 酒店反恐防爆工作制度
评论
0/150
提交评论