MD5 源代码未输出正确的值
MD5 source code not outputting correct values
我正在尝试 运行 我的 linux 机器上的 md5 源代码。我从这里得到代码:https://www.rfc-editor.org/rfc/rfc1321.
在 link 的底部,它声称 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 中抛出了一个错误,说 'line 20 MD5 is undefined'(或类似的东西),所以我将第 20 行从“#define MD MD5”更改为“#”定义 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 not declared' 错误,请告诉我。谢谢。
MD5 是一种旧算法,RFC 中的源代码可能不是为 64 位机器编写的。因此,代码很可能在不同的处理器架构上失败。
为了在 64 位机器上编译,您需要将 -m32 标志传递给 gcc。在 linux,您可能还需要安装 libc6-dev-i386 包。
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;
我正在尝试 运行 我的 linux 机器上的 md5 源代码。我从这里得到代码:https://www.rfc-editor.org/rfc/rfc1321.
在 link 的底部,它声称 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 中抛出了一个错误,说 'line 20 MD5 is undefined'(或类似的东西),所以我将第 20 行从“#define MD MD5”更改为“#”定义 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 not declared' 错误,请告诉我。谢谢。
MD5 是一种旧算法,RFC 中的源代码可能不是为 64 位机器编写的。因此,代码很可能在不同的处理器架构上失败。
为了在 64 位机器上编译,您需要将 -m32 标志传递给 gcc。在 linux,您可能还需要安装 libc6-dev-i386 包。
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;