版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、socket+dh+cr4 實(shí)現(xiàn)文件傳輸加密client.cpp/ client.cpp : Defines the entry point for the console application. /#include <stdio.h>#include <Winsock2.h>#include<stdlib.h>#include<string.h>/你用了winsock 但沒(méi)有鏈接相應(yīng)的lib 文件。加上這一句:#pragma comment(lib, "ws2_32.lib ")#define FNAME 30void I
2、nitial(char *);/初始化的函數(shù)void Crypt();unsigned int S256;/ S 數(shù)組void nego(int *a) ;/初始化的函數(shù)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(b>0)&&(b%2=0)b=b/2; a=(a*a)%p; else b=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;
3、void re_S(char *S)int i;for(i=0;i<256;i+)Si=i;void re_T(char *T,char *key)int i;int keylen;keylen=strlen(key);for(i=0;i<256;i+)Ti=keyi%keylen;void re_Sbox(char *S,char *T)int i;int j=0;for(i=0;i<256;i+)j=(j+Si+Ti)%256;swap(&Si,&Sj); void RC4_1(FILE *readfile,FILE *writefile,char *ke
4、y)/ 加密 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(readbuf,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 a
5、rgc, char* argv)printf(" 客戶端:?jiǎn)?dòng)n");int x=0;printf(" 說(shuō)明 :由客戶端定義大素?cái)?shù)和原根,客戶端加密文件后發(fā)給服務(wù)器端,服務(wù)器短解密得到正確的消息n");printf("n");printf(" 發(fā)送大素?cái)?shù)和原根給服務(wù)器端n");nego(&x);char key=""FILE *file1,*file2;char filePath150;printf("n");printf(" 開(kāi)始文件傳輸n");
6、printf(" 請(qǐng)輸入要發(fā)送的文件路徑:");scanf("%s",filePath1);printf(" 準(zhǔn)備加密文件,請(qǐng)輸入共享密鑰:");scanf("%s",&key);file1= fopen(filePath1,"r");file2 = fopen("1.txt","w");RC4_1(file1,file2,key);fclose(file1);fclose(file2);printf(" 加密成功,準(zhǔn)備發(fā)送給服務(wù)器端&q
7、uot;);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(" 請(qǐng)輸入 IP 地址 :");/scanf("%s",server);memcpy(server,"127.0.0.1",sizeof
8、("127.0.0.1");char filePath50;strcpy(filePath, "1.txt");HANDLEfp=CreateFile(filePath,GENERIC_READ,0,NULL,OPEN_EXISTING ,FILE_ATTRI BUTE_NORMAL,NULL);while(fp=INV ALID_HANDLE_V ALUE) printf("文件路徑錯(cuò)誤,請(qǐng)重新輸入:”);scanf("%s",filePath);fp=CreateFile(filePath,GENERIC_READ,0,
9、NULL,OPEN_EXISTING ,FILE_ATTRI BUTE_NORMAL,NULL);printf("%sn",filePath);DWORD fileLen=GetFileSize(fp,&fileLen);printf(" 你選擇的文件大小為:%u 字節(jié) 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*)&am
10、p;local,sizeof(SOCKADDR)=SOCKET_ERROR) printf("connect error:%in",WSAGetLastError();return 0;char* buffer=new charfileLen;DWORD bufferLen=0;/讀取文件到緩存中ReadFile(fp,buffer,fileLen,&bufferLen,NULL);bool isFirst=true;/第一次發(fā)送int sendLen=0;/實(shí)際發(fā)送數(shù)據(jù)的長(zhǎng)度char sendBuffer200;/發(fā)送幀int sendedLen=0;/S前已發(fā)送
11、的文件長(zhǎng)度int leftLen=fileLen;/ 當(dāng)前剩下的文件長(zhǎng)度while(true)if(isFirst)sendLen=send(sock,"",1,0);isFirst=false;if(sendLen<0)printf(" 第一幀發(fā)送失敗,程序結(jié)束n");return 0;Sleep(1000);continue;if(leftLen<=0)|(sendedLen>=fileLen)/剩下長(zhǎng)度為 0 或當(dāng)前已發(fā)送長(zhǎng)度 為文件長(zhǎng)則退出break;if(leftLen>=200)memcpy(sendBuffer,bu
12、ffer+sendedLen,200);sendLen=send(sock,sendBuffer,200,0);if(sendLen<0)printf(" 幀發(fā)送失敗,程序結(jié)束n");return 0;else memcpy(sendBuffer,buffer+sendedLen,leftLen); sendLen=send(sock,sendBuffer,leftLen,0);if(sendLen<0)printf(" 幀發(fā)送失敗,程序結(jié)束n");return 0;Sleep(1000);send(sock,"#",1,
13、0);sendedLen+=sendLen;leftLen=fileLen-sendedLen;printf(" 已經(jīng)發(fā)送:%d 字節(jié) n",sendedLen);if(sendedLen=fileLen)printf(" 文件發(fā)送成功n"); elseprintf(" 文件發(fā)送失敗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 XB1=
14、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 ) !=
15、1 |HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );sockClient=socket(AF_INET,SOCK_STREAM,0);addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(2120);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);printf(" 請(qǐng)輸入?yún)f(xié)商的素?cái)?shù):")
16、;char su10;gets(su);send(sockClient,su,strlen(su)+1,0);Q=atoi(su);printf(" 請(qǐng)輸入?yún)f(xié)商的原根:");gets(su);send(sockClient,su,strlen(su)+1,0);A=atoi(su);printf("n");printf(" 輸入自己的私鑰并計(jì)算出公鑰發(fā)給服務(wù)器端n");printf(" 請(qǐng)輸入自己的私鑰:");scanf("%d",&XA1);XA2=Run(A,XA1,Q,t);pri
17、ntf(" 發(fā)送自己的公鑰%d 給服務(wù)器端n",XA2);sprintf(su,"%d",XA2);send(sockClient,su,strlen(su)+1,0);printf("n");printf(" 等待服務(wù)器端的公鑰n");recv(sockClient,recvBuf,50,0);*a = atoi(recvBuf);printf(" 得到服務(wù)器端公鑰:%dn",*a);k=Run(*a,XA1,Q,t);printf("n");printf(" 計(jì)
18、算共享的秘密密鑰n");printf(" 共享的秘密密鑰KEY 為 %dn",k);closesocket(sockClient);WSACleanup();server.cpp/ server.cpp : Defines the entry point for the console application./#include <stdio.h>#include <winsock2.h>#include <string.h>#include <windows.h>#include <stdlib.h>#
19、pragma comment(lib, "ws2_32.lib ")void nego(int *a,int *b,int *c) ;/初始化的函數(shù)void swap(char *s1,char *s2)char temp;temp=*s1;*s1=*s2;*s2=temp;void re_S(char *S)int i;for(i=0;i<256;i+)Si=i;void re_T(char *T,char *key)int i;int keylen;keylen=strlen(key);for(i=0;i<256;i+)Ti=keyi%keylen;void
20、 re_Sbox(char *S,char *T)int i;int j=0;for(i=0;i<256;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(readbuf,1,1,readfile)i = (i + 1) % 256;j = (j +
21、 Si) % 256;swap(&Si,&Sj);t = (Si + (Sj % 256) % 256;readbuf0=readbuf0ASt;fwrite(readbuf,1,1,writefile);memset(readbuf,0,1);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(b>0)&&(b%2=0)b=b/2;a=(a*a)%p;elseb=b-1;c=(a*c)%p;Run(a,b,p,c);int main(int argc, cha
22、r* argv)printf(" 服務(wù)器端:?jiǎn)?dòng)n");int x=0,y=0,z=0;printf(" 說(shuō)明 :由客戶端定義大素?cái)?shù)和原根,客戶端加密文件后發(fā)給服務(wù)器端,服務(wù)器短解密得到正確的消息n");printf("n");printf(" 等待客戶端客戶端定義大素?cái)?shù)和原根n");nego(&x,&y,&z);WSADATA wsa;WSAStartup(MAKEWORD(2,2),&wsa);SOCKET sock=socket(AF_INET,SOCK_STREAM,0);i
23、f(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",WSAGetLastError();return 0; if(listen
24、(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
25、.sin_addr);int recvLen=0;/收至ij的緩沖的長(zhǎng)度int recvedLen=0;/當(dāng)前已經(jīng)收到的長(zhǎng)度DWORD writeLen;/實(shí)際寫入文件的長(zhǎng)度int fileLen=0;/文件長(zhǎng)度char* buffer;/文件緩沖char recvBuffer200;/ 接收緩沖區(qū)buffer=new char1024*1024*10;/接收字節(jié)數(shù) <=10MrecvLen=recv(clientSock,recvBuffer,200,0);if(recvBuffer0='')printf(" 開(kāi)始接收文件n");memset(rec
26、vBuffer,0,200);while(true)recvLen=recv(clientSock,recvBuffer,200,0);if(recvLen=1)&&(recvBuffer0='#')break;memcpy(buffer+recvedLen,recvBuffer,recvLen);recvedLen+=recvLen;printf(" 接收: %dn",recvLen);printf(" 已經(jīng)接收%i 字節(jié)數(shù)據(jù)n",recvedLen);HANDLEfp=CreateFile("1.txt&qu
27、ot;,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIB UTE_NORMAL,NULL);WriteFile(fp,buffer,recvedLen,&writeLen,NULL);printf(" 寫入文件長(zhǎng)度:%un",writeLen);CloseHandle(fp);delete buffer;WSACleanup();char key=""printf(" 準(zhǔn)備解密文件:請(qǐng)輸入共享密鑰:");scanf("%s",&key);FILE *file1
28、,*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 *c)int t=1;int Q;int A;int XA1=0;long int XA2=1;int XB1=0;long int k=1;WORD wVersi
29、onRequested;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 ) printf("something error!");if ( LOBYTE( wsaData.wVersion ) != 1 |HIB
30、YTE( 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);listen(sockSrv,5);len=sizeof(SOCKADDR);while(1)SOCKET sockCon
31、n=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char su10;recv(sockConn,recvBuf,50,0);*a = atoi(recvBuf);printf(" 客戶端定義的大素?cái)?shù):%dn",*a);recv(sockConn,recvBuf,50,0);*b = atoi(recvBuf);printf(" 客戶端定義的原根:%dn",*b);printf("n");printf(" 等待客戶端的公鑰n");recv(sockConn,recvBuf,50,0);*c = atoi(recvBuf);printf(" 客戶端的公鑰:%dn",*c);Q=*a;A=*b;XB1=*c;printf("n");printf(" 輸入自己的私鑰并計(jì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 足療店員工合同協(xié)議書范本
- 精準(zhǔn)權(quán)威治療協(xié)議服務(wù)合同
- 智能軟件服務(wù)升級(jí)新約
- 家庭電器安全保證
- 物資采購(gòu)合同范例
- 抗磨損性能灰砂磚采購(gòu)
- 上海房屋交易合同規(guī)范版
- 循環(huán)借款合同的金融科技應(yīng)用
- 學(xué)生筆記本采購(gòu)合同范本
- 易用的競(jìng)爭(zhēng)性談判招標(biāo)文件范本
- 中心氣道介入治療ppt課件
- 部編版語(yǔ)文三年級(jí)下冊(cè)《綜合性學(xué)習(xí)-中華傳統(tǒng)節(jié)日》PPT課件公開(kāi)課
- 建筑施工生產(chǎn)安全事故應(yīng)急救援預(yù)案
- 原子吸收光譜儀的結(jié)構(gòu)
- 高效全自動(dòng)凈水器操作使用說(shuō)明
- (完整版)園林景觀工程進(jìn)度計(jì)劃?rùn)M道圖
- ppt素材――小圖標(biāo) 可直接使用
- 穿越220kV線路施工方案
- 2011辛卯年風(fēng)水布局概述
- 養(yǎng)殖戶糞污污染情況整改報(bào)告2篇
- Q-FT B039-2006汽車產(chǎn)品油漆涂層技術(shù)條件
評(píng)論
0/150
提交評(píng)論