2

我正在尝试在我的 linux 机器上运行 md5 源代码。我从这里得到了代码:https ://www.rfc-editor.org/rfc/rfc1321 。

在链接的底部,它声称 MD5 测试套件的输出应如下所示:

MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a

在我的 md5 文件夹中,我有以下内容:

global.h
md5c.c
md5.h
mddriver.c

当我一开始尝试编译时,它在 mddriver.c 中抛出一个错误,说“第 20 行 MD5 未定义”(或类似的东西),所以我将第 20 行从“#define MD MD5”更改为“#define MD 5”。考虑到其余的代码,这可行并且似乎很有意义。

我在 MD5 文件夹中使用以下内容进行编译:

gcc -Wall *.c -o out

这创建了我可以使用的文件“out”

./out -x

其中参数“-x”用于运行测试套件。但是,我得到了“./out -x”的以下输出:

MD5 test suite:
MD5 ("") = e4c23762ed2823a27e62a64b95c024e7
MD5 ("a") = 793a9bc07e209b286fa416d6ee29a85d
MD5 ("abc") = 7999dc75e8da648c6727e137c5b77803
MD5 ("message digest") = 840793371ec58a6cc84896a5153095de
MD5 ("abcdefghijklmnopqrstuvwxyz") = 98ef94f1f01ac7b91918c6747fdebd96
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = dabcd637cde443764c4f8aa099cf23be
MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = e29c01a1e2a663c26b4a68bf7ec42df7

这显然不一样。我错过了什么吗?如果您希望我重新创建“MD5 未声明”错误,请告诉我。谢谢。

4

2 回答 2

2

MD5 是一种旧算法,RFC 中的源代码可能不是用 64 位机器编写的。因此,代码很可能在不同的处理器架构上失败。

为了在 64 位机器上编译,您需要将 -m32 标志传递给 gcc。在 linux 上,您可能还需要安装 libc6-dev-i386 软件包。

于 2015-11-30T23:48:00.540 回答
1

global.h有:

/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;

将 global.h更改为:

#include <inttypes.h>

/* UINT2 defines a two byte word */
typedef uint16_t  UINT2;

/* UINT4 defines a four byte word */
typedef uint32_t UINT4;
于 2020-03-01T07:28:33.193 回答