影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

socket+dh+cr4實現(xiàn)文件傳輸加密要點

上傳人:簡****9 文檔編號:24784363 上傳時間:2021-07-12 格式:DOCX 頁數(shù):14 大小:15.79KB
收藏 版權(quán)申訴 舉報 下載
socket+dh+cr4實現(xiàn)文件傳輸加密要點_第1頁
第1頁 / 共14頁
socket+dh+cr4實現(xiàn)文件傳輸加密要點_第2頁
第2頁 / 共14頁
socket+dh+cr4實現(xiàn)文件傳輸加密要點_第3頁
第3頁 / 共14頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《socket+dh+cr4實現(xiàn)文件傳輸加密要點》由會員分享,可在線閱讀,更多相關(guān)《socket+dh+cr4實現(xiàn)文件傳輸加密要點(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、socket+dh+cr4實現(xiàn)文件傳輸加密 client.cpp // client.cpp : Defines the entry point for the console application. // #include #include #include #include //你用了 winsock但沒有鏈接相應(yīng)的lib文件。加上這一句: #pragma comment(lib, "ws2_32.lib ") #define FNAME 30 void Initial(char *)

2、; 〃初始化的函數(shù) void Crypt(); unsigned int S[256]; // 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⑵ a=(a*a)%p; } else { b=b-1; c=(a*c)%p; } Run(a,b,p,c); void swap(char *s1,char *s2) { ch

3、ar temp; temp=*s1; *s1=*s2; *s2=temp; } void re_S(char *S) {. int i; for(i=0;i<256;i++) S[i]=i; } void re_T(char *T,char *key) {. int i; int keylen; keylen=strlen(key); for(i=0;i<256;i++) T[i]=key[i%keylen]; } void re_Sbox(char *S,char *T) {. int i; int j=0; for(i=0;i<256;i++)

4、 { j=(j+S[i]+T[i])%256; swap(&S[i],&S[j]); } } void RC4_1(FILE *readfile,FILE *writefile,char *key)// 力口密 { . char S[256]={0}; char readbuf[1]; int i,j,t; char T[256]={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 + S[i

5、]) % 256; swap(&S[i],&S[j]); t = (S[i] + (S[j] % 256)) % 256; readbuf[0]=readbuf[0]AS[t]; fwrite(readbuf,1,1,writefile); memset(readbuf,0,1); } } int main(int argc, char* argv口) { printf("—-客戶端:啟動--——\n"); int x=0; printf("----說明:由客戶端定義大素數(shù)和原根,客戶端加密文件后發(fā)給服務(wù)器 端,服務(wù)器短解密得到正確的消息----\n"); printf(

6、"\n"); printf("—發(fā)送大素數(shù)和原根給服務(wù)器端—\n"); nego(&x); char key[]=""; FILE *file1,*file2; char filePath1[50]; printf("\n"); printf("----開始文件傳輸----\n"); printf("請輸入要發(fā)送的文件路徑:”); scanf("%s",filePath1); printf("準(zhǔn)備加密文件,請輸入共享密鑰:"); scanf("%s”,&key); file1= fopen(filePath1,"r"); file2 = fopen("1.txt","

7、w"); RC4_1(file1,file2,key); fclose(filel); fclose(file2); printf("加密成功,準(zhǔn)備發(fā)送給服務(wù)器端"); WSADATA wsa; WSAStartup(MAKEWORD(2,2),&wsa); SOCKET sock=socket(AF_INET,SOCK_STREAM,0); if(sock==INVALID_SOCKET) { printf("socket error\n"); return 0; } SOCKADDR_IN local; char server[20]; //printf("請輸

8、入 IP 地址:"); 〃scanf("%s",server); memcpy(server,"127.0.0.1",sizeof("127.0.0.1")); char filePath[50]; strcpy(filePath, "1.txt"); HANDLE fp=CreateFile(filePath,GENERIC_READ,0,NULL,OPEN_EXISTING ,FILE_ATTRI BUTE_NORMAL,NULL); while(fp==INVALID_HANDLE_V ALUE) { printf("文件路徑錯誤,請重新輸入:”); scanf("%s

9、",filePath); fp=CreateFile(filePath,GENERIC_READ,0,NULL,OPEN_EXISTING ,FILE_ATTRI BUTE_NORMAL,NULL); } printf("%s\n",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=

10、htons(10000); if(connect(sock,(SOCKADDR*)&local,sizeof(SOCKADDR))==SOCKET_ERROR) { printf("connect error:%i\n",WSAGetLastError()); return 0; char* buffer=new char[fileLen]; DWORD bufferLen=0; //讀取文件到緩存中 ReadFile(fp,buffer,fileLen,&bufferLen,NULL); bool isFirst=true;//第一次發(fā)送 int sendLen=0;//實

11、際發(fā)送數(shù)據(jù)的長度 char sendBuffer[200];//發(fā)送幀 int sendedLen=0;//S前已發(fā)送的文件長度 int leftLen=fileLen;//當(dā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

12、))//剩下長度為 0 或當(dāng)前已發(fā)送長度 為文件長則退出 break; if(leftLen>=200) { memcpy(sendBuffer,buffer+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(sendL

13、en<0) { printf("幀發(fā)送失敗,程序結(jié)束\n"); return 0; } Sleep(1000); send(sock,"#",1,0); } sendedLen+=sendLen; leftLen=fileLen-sendedLen; printf("已經(jīng)發(fā)送:%d 字節(jié)\n",sendedLen); } if(sendedLen==fileLen) { printf("文件發(fā)送成功\n"); } else printf("文件發(fā)送失敗\n"); closesocket(sock); WSACleanup(); delete口 buffer

14、; return 0; } void nego(int *a) { int t=1; int Q; int A; int XA1=0; long int XA2=1; int XB1=0; long int k=1; int *k1; WORD wVersionRequested; WSADATA wsaData; int err; SOCKET sockClient; SOCKADDR_IN addrSrv; char recvBuf[50]; wVersionRequested = MAKEWORD( 1,1); err = WSAStartup(

15、wVersionRequested, &wsaData ); if ( err != 0 ) { printf("something error!"); } if ( LOBYTE( wsaData.wVersion ) != 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_IN

16、ET; addrSrv.sin_port=htons(2120); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); printf("請輸入?yún)f(xié)商的素數(shù):"); char su[10]; gets(su); send(sockClient,su,strlen(su)+1,0); Q=atoi(su); printf("請輸入?yún)f(xié)商的原根:"); gets(su); send(sockClient,su,strlen(su)+1,0); A=atoi(su); printf("\n"); printf("--

17、--輸入自己的私鑰并計算出公鑰發(fā)給服務(wù)器端----\n"); printf("請輸入自己的私鑰:"); scanf("%d",&XA1); XA2=Run(A,XA1,Q,t); printf("發(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ù)

18、器端公鑰:%d\n",*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

19、.h> #include #include #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++) S[i]=i; } void re_T(char *T,char *key)

20、 {. int i; int keylen; keylen=strlen(key); for(i=0;i<256;i++) T[i]=key[i%keylen]; } void re_Sbox(char *S,char *T) { int i; int j=0; for(i=0;i<256;i++) { j=(j+S[i]+T[i])%256; swap(&S[i],&S[j]); } } void RC4_1(FILE *readfile,FILE *writefile,char *key)// 力口密 { . char S[256]={0}; cha

21、r readbuf[1]; int i,j,t; char T[256]={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 + S[i]) % 256; swap(&S[i],&S[j]); t = (S[i] + (S[j] % 256)) % 256; readbuf[0]=readbuf[0]AS[t]; fwrite(readbuf,1,1,writefile); memset(readb

22、uf,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⑵ a=(a*a)%p; } else { b=b-1; c=(a*c)%p; } Run(a,b,p,c); } int main(int argc, char* argv口) { printf("—服務(wù)器端:啟動—\n"); int x=0,y=0,z=0; printf("----說明:由客戶端定義大素數(shù)和原

23、根,客戶端加密文件后發(fā)給服務(wù)器 端,服務(wù)器短解密得到正確的消息----\n"); printf("\n"); printf("----等待客戶端客戶端定義大素數(shù)和原根----\n"); nego(&x,&y,&z); WSADATA wsa; WSAStartup(MAKEWORD(2,2),&wsa); SOCKET sock=socket(AF_INET,SOCK_STREAM,0); if(sock==INVALID_SOCKET) { printf("socket error\n"); return 0; SOCKADDR_IN local; local.sin_

24、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("%i\n",WSAGetLastError()); return 0; } if(listen(sock,5)==SOCKET_ERROR) { printf("%i\n",WSAGetLastError()); return 0; } printf("\n")

25、; printf("----等待客戶端傳輸文件----\n"); SOCKADDR_IN client; SOCKET clientSock; int addrLen=sizeof(SOCKADDR); clientSock=accept(sock,(SOCKADDR*)&client,&addrLen); printf("welcome:%s\n”,inet_ntoa(client.sin_addr)); int recvLen=0;//收至ij的緩沖的長度 int recvedLen=0;//當(dāng)前已經(jīng)收到的長度 DWORD writeLen;//實際寫入文件的長度 int

26、 fileLen=0;//文件長度 char* buffer;//文件緩沖 char recvBuffer[200];// 接收緩沖區(qū) buffer=new char[1024*1024*10];//接收字節(jié)數(shù) <=10M recvLen=recv(clientSock,recvBuffer,200,0); if(recvBuffer[0]==~) { printf("開始接收文件\n"); memset(recvBuffer,0,200); } while(true) { recvLen=recv(clientSock,recvBuffer,200,0); if((r

27、ecvLen==1)&&(recvBuffer[0]==#)) break; memcpy(buffer+recvedLen,recvBuffer,recvLen); recvedLen+=recvLen; printf("接收:%d\n",recvLen); printf("已經(jīng)接收 %i 字節(jié)數(shù)據(jù) \n",recvedLen); } HANDLE fp=CreateFile("1.txt",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIB UTE_NORMAL,NULL); WriteFile(fp,buffer,recvedLen

28、,&writeLen,NULL); printf("寫入文件長度:%u\n",writeLen); CloseHandle(fp); delete口 buffer; WSACleanup(); char key[]=""; printf("準(zhǔn)備解密文件:請輸入共享密鑰:”); 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);

29、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 wVersionRequested; WSADATA wsaData; int err; SOCKET sockSrv; SOCKADDR_IN addrSrv; int len; SOCKADDR_IN addrClient; char recvBuf[50]; wV

30、ersionRequested = MAKEWORD( 1,1); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { printf("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

31、=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 sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char su[10]; recv(sockConn,recvBuf,50,0); *a =

32、atoi(recvBuf); printf("客戶端定義的大素數(shù):%d\n",*a); recv(sockConn,recvBuf,50,0); *b = atoi(recvBuf); printf("客戶端定義的原根:%d\n",*b); printf("\n"); printf("----等待客戶端的公鑰----\n"); recv(sockConn,recvBuf,50,0); *c = atoi(recvBuf); printf("客戶端的公鑰:%d\n",*c); Q=*a; A=*b; XB1=*c; printf("\n"); printf("----

33、輸入自己的私鑰并計算出公鑰發(fā)給客戶端----\n"); printf("請輸入自己的私鑰:"); scanf("%d",&XA1); XA2=Run(A,XA1,Q,t); printf("發(fā)送自己的公鑰 %d給對方\n",XA2); sprintf(su,"%d",XA2); send(sockConn,su,strlen(su)+1,0); k=Run(*c,XA1,Q,t); printf("\n"); printf("----計算共享的秘密密鑰----\n"); printf("共享的秘密密鑰KEY為%~肝卜); closesocket(sockConn); b

34、reak; 2.cpp #include #include #include #include #include #pragma comment(lib,"ws2_32.lib") 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⑵ a=(a*a)%p; } else { b=b-1; c=

35、(a*c)%p; } Run(a,b,p,c); } int main(int argc, CHAR* argv[]) { int t=1; int Q=11351; int A=5; int XA1=0; long int XA2=1; int XB1=0; int i; long int k=1; printf("請輸入自己的私鑰XA1:"); scanf("%d",&XA1); XA2=Run(A,XA1,Q,t); printf("自己的公鑰的公鑰XA2:%d",XA2); printf("\n"); printf("請輸入對方的公鑰XB1:"); scanf("%d",&XB1); k=Run(XB1,XA1,Q,t); printf("KEY 為%~"卜); printf("\n"); }

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!