c - Port Diffie-Hellman key 交换算法从 Linux src 到 Windows

标签 c linux windows algorithm cryptography

这些天我正在读几本关于密码学的书, 因此,其中一本描述了 Diffie-Hellman key 交换算法 但没有详细说明。

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

我在linux下编译了它,运行得很好。 但现在我也想在windows下编译它。

我正在使用 Dev-C,编译器无法编译,因为 “bcopy”和“bzero”的 undefined reference 。

我尝试用 memset 更改 bzero 和 bcopy 与 memcpy (最终没有运气)。

我现在拥有的来源:

#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 替换是错误的。 两者中的第三个参数都是长度,另外两个参数交换,如下所示: #define bcopy(a, b, c) memcpy(b, a, c)

关于c - Port Diffie-Hellman key 交换算法从 Linux src 到 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22719068/

相关文章:

c - 递增变量将我的指针更改为指针数组值

c - Realloc 在循环中失败

c++ - python zlib 输出到 C++ 字符串

linux - 是否可以禁止来自 docker 日志的特定消息?

windows - 注定的技术?

windows - 在 Windows 命令行上运行 raco

c - 举例说明在 C 中扫描一个字符

c++ - 段错误 Opencv linux c++

php - Microsoft® ODBC Driver 11 for SQL Server® on RedHat Linux with PHP - 使用 PDO 为存储过程绑定(bind)参数时出错

c++ - 如何使用户可变常量?