版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、socket+dh+cr4实现文件传输加密client.cpp/ client.cpp : defines the entry point for the console application. /#include #include #include#include/你用了 winsock但没有链接相应的lib文件。加上这一句: #pragma comment(lib, ws2_32.lib )#define fname 30void initial(char *);初始化的函数void crypt();unsigned int s256;/ s 数组void nego(int *a) ;/
2、初始化的函数int run(int x,int r,int p,int t) int a,b,c;a=x;b=r;c=t;if(b=0)return c;if(b0)&(b%2=0)b=b a=(a*a)%p; elseb=b-1;c=(a*c)%p;run(a,b,p,c);void swap(char *s1,char *s2)char temp;temp=*s1;*s1=*s2;*s2=temp;void re_s(char *s).int i;for(i=0;i256;i+)si=i;void re_t(char *t,char *key).int i;int keylen;keyle
3、n=strlen(key);for(i=0;i256;i+)ti=keyi%keylen;void re_sbox(char *s,char *t) .int i;int j=0;for(i=0;i256;i+)j=(j+si+ti)%256;swap(&si,&sj);void rc4_1(file *readfile,file *writefile,char *key)/ 力口密 .char s256=0;char readbuf1;int i,j,t;char t256=0;re_s(s);re_t(t,key);re_sbox(s,t);i=j=0;while(fread(readbu
4、f,1,1,readfile)i = (i + 1) % 256;j = (j + si) % 256;swap(&si,&sj);t = (si + (sj % 256) % 256;readbuf0=readbuf0ast;fwrite(readbuf,1,1,writefile); memset(readbuf,0,1); int main(int argc, char* argv口)printf(-客户端:启动-n);int x=0;printf(-说明:由客户端定义大素数和原根,客户端加密文件后发给服务器 端,服务器短解密得到正确的消息-n);printf(n);printf(发送大
5、素数和原根给服务器端n);nego(&x);char key=;file *file1,*file2;char filepath150;printf(n);printf(-开始文件传输-n);printf(请输入要发送的文件路径:”);scanf(%s,filepath1);printf(准备加密文件,请输入共享密钥:);scanf(%s”,&key);file1= fopen(filepath1,r);file2 = fopen(1.txt,w);rc4_1(file1,file2,key);fclose(filel);fclose(file2);printf(加密成功,准备发送给服务器端)
6、;wsadata wsa;wsastartup(makeword(2,2),&wsa);socket sock=socket(af_inet,sock_stream,0); if(sock=invalid_socket)printf(socket errorn);return 0;sockaddr_in local;char server20;/printf(请输入 ip 地址:);scanf(%s,server);memcpy(server,,sizeof();char filepath50;strcpy(filepath, 1.txt);handlefp
7、=createfile(filepath,generic_read,0,null,open_existing ,file_attri bute_normal,null);while(fp=invalid_handle_v alue) printf(文件路径错误,请重新输入:”);scanf(%s,filepath);fp=createfile(filepath,generic_read,0,null,open_existing ,file_attri bute_normal,null);printf(%sn,filepath);dword filelen=getfilesize(fp,&fil
8、elen);printf(你选择的文件大小为: %u字节n,filelen);local.sin_addr.s_un.s_addr=inet_addr(server);local.sin_family=af_inet;local.sin_port=htons(10000);if(connect(sock,(sockaddr*)&local,sizeof(sockaddr)=socket_error)printf(connect error:%in,wsagetlasterror(); return 0;char* buffer=new charfilelen;dword bufferlen=0
9、;/读取文件到缓存中readfile(fp,buffer,filelen,&bufferlen,null);bool isfirst=true;/第一次发送int sendlen=0;/实际发送数据的长度char sendbuffer200;/发送帧int sendedlen=0;/s前已发送的文件长度int leftlen=filelen;/当前剩下的文件长度while(true)if(isfirst)sendlen=send(sock,1,0);isfirst=false;if(sendlen0) printf(第一帧发送失败,程序结束n);return 0;sleep(1000);con
10、tinue;if(leftlen=filelen)/剩下长度为 0 或当前已发送长度 为文件长则退出break;if(leftlen=200)memcpy(sendbuffer,buffer+sendedlen,200);sendlen=send(sock,sendbuffer,200,0);if(sendlen0)printf(帧发送失败,程序结束n);return 0;elsememcpy(sendbuffer,buffer+sendedlen,leftlen); sendlen=send(sock,sendbuffer,leftlen,0);if(sendlen0)printf(帧发送失
11、败,程序结束n);return 0;sleep(1000);send(sock,#,1,0);sendedlen+=sendlen;leftlen=filelen-sendedlen;printf(已经发送:%d 字节n,sendedlen);if(sendedlen=filelen)printf(文件发送成功n); elseprintf(文件发送失败n);closesocket(sock);wsacleanup();delete口 buffer;return 0;void nego(int *a)int t=1;int q;int a;int xa1=0;long int xa2=1;int
12、 xb1=0;long int k=1;int *k1;word wversionrequested;wsadata wsadata;int err;socket sockclient;sockaddr_in addrsrv;char recvbuf50;wversionrequested = makeword( 1,1);err = wsastartup( wversionrequested, &wsadata );if ( err != 0 ) printf(something error!);if ( lobyte( wsadata.wversion ) != 1 |hibyte( ws
13、adata.wversion ) != 1 ) wsacleanup();sockclient=socket(af_inet,sock_stream,0);addrsrv.sin_addr.s_un.s_addr=inet_addr();addrsrv.sin_family=af_inet;addrsrv.sin_port=htons(2120);connect(sockclient,(sockaddr*)&addrsrv,sizeof(sockaddr);printf(请输入协商的素数:);char su10;gets(su);send(sockclient,su,strl
14、en(su)+1,0);q=atoi(su);printf(请输入协商的原根:);gets(su);send(sockclient,su,strlen(su)+1,0);a=atoi(su);printf(n);printf(-输入自己的私钥并计算出公钥发给服务器端-n);printf(请输入自己的私钥:);scanf(%d,&xa1);xa2=run(a,xa1,q,t);printf(发送自己的公钥 d给服务器端n”,xa2);sprintf(su,%d,xa2);send(sockclient,su,strlen(su)+1,0);printf(n);printf(-等待服务器端的公钥-
15、n);recv(sockclient,recvbuf,50,0);*a = atoi(recvbuf);printf(得到服务器端公钥:%dn,*a);k=run(*a,xa1,q,t);printf(n);printf(-计算共享的秘密密钥-n);printf(共享的秘密密钥key为肝卜);closesocket(sockclient);wsacleanup();server.cpp/ server.cpp : defines the entry point for the console application./#include #include #include #include #i
16、nclude #pragma comment(lib, ws2_32.lib )void nego(int *a,int *b,int *c) ;/初始化的函数void swap(char *s1,char *s2)char temp;temp=*s1;*s1=*s2;*s2=temp;void re_s(char *s)int i;for(i=0;i256;i+)si=i;void re_t(char *t,char *key).int i;int keylen;keylen=strlen(key);for(i=0;i256;i+)ti=keyi%keylen;void re_sbox(ch
17、ar *s,char *t)int i;int j=0;for(i=0;i0)&(b%2=0)b=ba=(a*a)%p; elseb=b-1;c=(a*c)%p; run(a,b,p,c); int main(int argc, char* argv口)printf(服务器端:启动n);int x=0,y=0,z=0;printf(-说明:由客户端定义大素数和原根,客户端加密文件后发给服务器 端,服务器短解密得到正确的消息-n);printf(n);printf(-等待客户端客户端定义大素数和原根-n);nego(&x,&y,&z);wsadata wsa;wsastartup(makewor
18、d(2,2),&wsa);socket sock=socket(af_inet,sock_stream,0);if(sock=invalid_socket)printf(socket errorn); return 0;sockaddr_in local;local.sin_addr.s_un.s_addr=inaddr_any;local.sin_family=af_inet;local.sin_port=htons(10000);if(bind(sock,(sockaddr*)&local,sizeof(sockaddr)=socket_error) printf(%in,wsagetla
19、sterror();return 0;if(listen(sock,5)=socket_error) printf(%in,wsagetlasterror();return 0;printf(n);printf(-等待客户端传输文件-n);sockaddr_in client;socket clientsock;int addrlen=sizeof(sockaddr);clientsock=accept(sock,(sockaddr*)&client,&addrlen); printf(welcome:%sn”,inet_ntoa(client.sin_addr);int recvlen=0;
20、/收至ij的缓冲的长度int recvedlen=0;/当前已经收到的长度dword writelen;/实际写入文件的长度int filelen=0;/文件长度char* buffer;/文件缓冲char recvbuffer200;/ 接收缓冲区buffer=new char1024*1024*10;/接收字节数 =10mrecvlen=recv(clientsock,recvbuffer,200,0);if(recvbuffer0=)printf(开始接收文件n);memset(recvbuffer,0,200); while(true)recvlen=recv(clientsock,r
21、ecvbuffer,200,0);if(recvlen=1)&(recvbuffer0=#)break;memcpy(buffer+recvedlen,recvbuffer,recvlen);recvedlen+=recvlen;printf(接收:dn,recvlen);printf(已经接收 %i 字节数据 n,recvedlen);handlefp=createfile(1.txt,generic_write,0,null,open_always,file_attrib ute_normal,null);writefile(fp,buffer,recvedlen,&writelen,nu
22、ll);printf(写入文件长度:un,writelen);closehandle(fp);delete口 buffer;wsacleanup();char key=;printf(准备解密文件:请输入共享密钥:”);scanf(%s”,&key);file *file1,*file2;file1= fopen(1.txt,r);file2 = fopen(2.txt,w);rc4_1(file1,file2,key);fclose(file1);fclose(file2);printf(解密成功,保存在server文件夹2.txt中)void nego(int *a,int *b,int
23、*c)int t=1;int q;int a;int xa1=0;long int xa2=1;int xb1=0;long int k=1;word wversionrequested;wsadata wsadata;int err;socket socksrv;sockaddr_in addrsrv;int len;sockaddr_in addrclient;char recvbuf50;wversionrequested = makeword( 1,1);err = wsastartup( wversionrequested, &wsadata );if ( err != 0 ) pr
24、intf(something error!);if ( lobyte( wsadata.wversion ) != 1 |hibyte( wsadata.wversion ) != 1 ) wsacleanup();socksrv=socket(af_inet,sock_stream,0);addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);addrsrv.sin_family=af_inet;addrsrv.sin_port=htons(2120);bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr);l
25、isten(socksrv,5);len=sizeof(sockaddr);while(1)socket sockconn=accept(socksrv,(sockaddr*)&addrclient,&len); char su10;recv(sockconn,recvbuf,50,0);*a = atoi(recvbuf);printf(客户端定义的大素数:dn,*a);recv(sockconn,recvbuf,50,0);*b = atoi(recvbuf);printf(客户端定义的原根:dn,*b);printf(n);printf(-等待客户端的公钥-n);recv(sockconn,recvb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级管理奖惩制度细则
- 养老机构内部奖惩制度
- 护士安全绩效奖惩制度
- 招标公司考核与奖惩制度
- 教师教学常规奖惩制度实施细则
- 教育行业员工奖惩制度
- 方案奖惩制度实施细则
- 施工监测规范奖惩制度
- 无烟单位创建奖惩制度
- 服装设计部门奖惩制度
- 关于组织2026年春季新员工入职培训的通知函9篇范本
- 2025年江西旅游商贸职业学院单招职业适应性测试题库及答案解析
- 播种绿色希望共建美丽校园2026植树节主题教育课件
- 2026年海南软件职业技术学院单招综合素质考试题库及答案解析
- 2025年安庆市生态环境保护综合行政执法支队内勤辅助岗招聘笔试参考题库附带答案详解
- 公司文明卫生考核制度
- 2025中国南水北调集团新能源投资有限公司所属单位公开招聘34人笔试参考题库附带答案详解
- 《生成式人工智能应用实战》 课件全套 第1-10章:AI 与 AIGC 概述-AIGC应用综合实训
- 2026年春人教版(新教材)小学体育与健康三年级全一册教学计划及进度表(第二学期)
- 心理健康教育工作主要经验、做法以及争创工作的主要成效
- 新教材教科版五年级上册科学 3-3《我们的水钟》课件
评论
0/150
提交评论