这些天我正在读几本关于密码学的书, 因此,其中一本书描述了Diffie-Hellman密钥交换算法 但不详细。
所以我决定在互联网上搜索一个实现,然后我找到了这个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);}
答案 0 :(得分:0)
您的bcopy更换错误。 两者中的第三个参数是长度,其他两个是交换的,所以: #define bcopy(a,b,c)memcpy(b,a,c)