这几天我正在阅读一些关于密码学的书籍, ,所以其中一本书描述了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);}
如何添加一些适当的缩进? – Deduplicator
你是对的,但是我从哪里拿到它的来源是乱七八糟的。不过,我会尽量缩进它,等一下。 –