MD4 RFC1320给出错误的哈希值

MD4 RFC1320给出错误的哈希值,c,hash,cryptography,C,Hash,Cryptography,我试图让我自己的MD4哈希实现工作,以解决Matasano问题,但无法获得正确的测试向量。我以为我在某个时候把endianness或其他什么搞砸了 为了找出哪里出了问题,我决定编译中给出的参考实现,使用调试器检查两个程序并播放“找出差异”。我复制/粘贴了代码,没有做任何修改,并使用-x(testsuite选项)运行它 我得到了错误的测试向量 具体来说,我得到的结果是 MD4 test suite: MD4 ("") = 3e8ce4256176cc6f23583a774a91316c MD4 (

我试图让我自己的MD4哈希实现工作,以解决Matasano问题,但无法获得正确的测试向量。我以为我在某个时候把endianness或其他什么搞砸了

为了找出哪里出了问题,我决定编译中给出的参考实现,使用调试器检查两个程序并播放“找出差异”。我复制/粘贴了代码,没有做任何修改,并使用-x(testsuite选项)运行它

我得到了错误的测试向量

具体来说,我得到的结果是

MD4 test suite:
MD4 ("") = 3e8ce4256176cc6f23583a774a91316c
MD4 ("a") = 40b4c066caa949d3e0576277d2d310df
MD4 ("abc") = a013c51eca433daca5b2a594d21af1fe
MD4 ("message digest") = 40de4367b3e76cee4dc5d90372ced0cf
MD4 ("abcdefghijklmnopqrstuvwxyz") = d9b9fc5aa9bfcbefac96214ae64ede8b
MD4 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 44e0908e086752b6c2b8738212ce278f
MD4 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = d219055e9ccff0c40caa7efcef86e10f
如果将其与on(或on)上的测试向量进行比较,则完全不正确

然后我对另一个md4哈希实现做了同样的事情,我在网上找到了它(),得到了同样的错误测试向量

我如何开始找出错误在哪里?我是否包含了一些不正确的标准库?我的处理器架构有错吗?用谷歌搜索不正确的散列会得到零结果,所以我必须得出结论,我是唯一一个有过这个问题的白痴


非常感谢任何关于从哪里开始寻找的建议

在@vojta的帮助下,我发现问题出在
global.h
中,其中
typedef unsigned long int UINT4
需要更改为
typedef uint32\u t UINT4
。在我的机器上,一个无符号长整型是一个64位实体,这把一切都搞糟了


(当然,
UINT2
也需要输入定义到
uint16\u t

好的,我编译了两个C源代码(来自RFC 1320和link),两个.exe文件在我的电脑上都能产生正确的输出。一些想法:1。检查是否在mddriver.c中定义MDFinal MD4Final。2.检查是否调用
MD4_Init(ctx)malloc
,而不是
calloc
,则struct
MD4_CTX
最初可能包含一些不可预测的数据)中计算哈希之前,code>就是问题所在。更改
typedef无符号长整数UINT4
typedef uint32\u t UINT4
(对于
UINT2
,uint16\u t也一样)修复了所有问题。谢谢你的帮助,也谢谢你为我提出了这个显而易见的问题!!太好了,把它贴出来作为答案,我会投上一票。@vojta贴上去:)