簡體   English   中英

Port Diffie-Hellman密鑰交換算法從Linux src到Windows

[英]Port Diffie-Hellman Key Exchange algorithm From Linux src to Windows

如今,我正在閱讀幾本有關密碼學的書,因此,其中一本書描述了Diffie-Hellman密鑰交換算法,但沒有詳細介紹。

因此,我決定在Internet上搜索以查找實現,然后找到了10行C語言的源代碼: http : //www.cypherspace.org/rsa/dh-in-C.html

我在linux上編譯它,並且工作正常。 但是現在我也想在Windows下編譯它。

我正在使用Dev-C,並且由於未定義引用“ bcopy”和“ bzero”,因此編譯器無法編譯。

我嘗試使用memset更改bzero並使用memcpy更改bcopy(最后沒有運氣)。

我現在的來源:

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define bzero(p, l) memset(p, 0, l) // Since not on windows
#define bcopy(a, b, a) memcpy(b, a, b)      // Since not on windows - OOPS NO, src,dst are the wrong way round
/* Usage: dh base exponent modulus */ 
typedef unsigned char u;u m[1024],g[1024],e[1024],b[1024];int n,v,d,z,S=129;a( u *x,u *y,int o){d=0;for(v=S;v--;){d+=x[v]+y[v]*o;x[v]=d;d=d>>8;}}s(u *x){for( v=0;(v<S-1)&&(x[v]==m[v]);)v++;if(x[v]>=m[v])a(x,m,-1);}r(u *x){d=0;for(v=0;v< S;){d|=x[v];x[v++]=d/2;d=(d&1)<<8;}}M(u *x,u *y){u X[1024],Y[1024];bcopy(x,X,S );bcopy(y,Y,S);bzero(x,S);for(z=S*8;z--;){if(X[S-1]&1){a(x,Y,1);s(x);}r(X);a(Y ,Y,1);s(Y);}}h(char *x,u *y){bzero(y,S);for(n=0;x[n]>0;n++){for(z=4;z--;)a(y,y ,1);x[n]|=32;y[S-1]|=x[n]-48-(x[n]>96)*39;}}p(u *x){for(n=0;!x[n];)n++;for(;n< S;n++)printf("%c%c",48+x[n]/16+(x[n]>159)*7,48+(x[n]&15)+7*((x[n]&15)>9)); printf("\n");}main(int c,char **v){h(v[1],g);h(v[2],e);h(v[3],m);bzero(b,S);b[ S-1]=1;for(n=S*8;n--;){if(e[S-1]&1)M(b,g);M(g,g);r(e);}p(b);}

您的bcopy替換錯誤。 兩者中的第三個參數是length,另外兩個被交換,因此:#define bcopy(a,b,c)memcpy(b,a,c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM