MD5源代码未输出正确的值

问题描述 投票:2回答:2

我正在尝试在Linux机器上运行md5源代码。我从这里获得了代码:https://tools.ietf.org/html/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”错误,请告诉我。谢谢。

c hash cryptography md5 cryptographic-hash-function
2个回答
2
投票

MD5是一种旧算法,RFC中的源代码可能尚未考虑到64位计算机。因此,代码可能会在不同的处理器体系结构上失败。

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


0
投票

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;
© www.soinside.com 2019 - 2024. All rights reserved.