【发布时间】:2016-03-03 13:04:57
【问题描述】:
我正在尝试在我的 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 -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 未声明”错误,请告诉我。谢谢。
【问题讨论】:
-
用细齿梳子检查您的代码,并与标准进行比较以找出您的错误。据我所知,没有更好的解决方案。
-
听取了您的建议并检查了代码。我找不到任何真正的差异。决定尝试来自people.csail.mit.edu/rivest/Md5.c 的一些不同源代码 - 我编译并运行并得到与以前相同的错误结果。运行'echo -n a | md5sum' 返回字符串“a”的 md5 的预期正确结果。在这一点上,我已经尝试了两种不同的 md5 来源并且它们都遇到了同样的问题,所以我真的不知道该怎么做。编辑:不是说我要放弃。除非其他人有建议,否则我明天会再看看这个。
-
仅供参考:这个替代实现通过了测试sourceforge.net/projects/libmd5-rfc
-
让我猜猜:64位机?
-
@MaartenBodewes - 是的!你完全正确。我应该把它放在原来的问题中。当我使用'gcc -m32 -o out *.c'编译代码时,我得到了'./out -x'的正确输出。如果您想创建一个答案,我会用绿色对勾标记您的答案。
标签: c hash cryptography md5 cryptographic-hash-function