2014-03-28 40 views
0

这几天我正在阅读一些关于密码学的书籍, ,所以其中一本书描述了Diffie-Hellman密钥交换算法 ,但没有详细说明。端口Diffie-Hellman密钥交换算法从Linux src到Windows

,所以我决定在网上搜索找到一个实现,我发现这个10行的C源:http://www.cypherspace.org/rsa/dh-in-C.html

我在Linux编译它,它工作正常。 但现在我想在Windows下编译它。

我正在使用Dev-C,并且由于 未定义的“bcopy”和“bzero”引用,编译器无法编译。

我试着用memset 和memcpy (最后没有运气)改变bzero。

源我现在有:

#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);} 
+1

如何添加一些适当的缩进? – Deduplicator

+0

你是对的,但是我从哪里拿到它的来源是乱七八糟的。不过,我会尽量缩进它,等一下。 –

回答

0

你BCOPY更换是错误的。 第二个参数是长度,另外两个是交换,所以这样做: #define bcopy(a,b,c)memcpy(b,a,c)

+0

哦,没错(愚蠢的我),我现在开始工作了。谢谢!! –