MD4 RFC1320提供错误的哈希

时间:2015-12-23 04:38:58

标签: c hash cryptography

我试图让我自己实现的MD4哈希工作,对于Matasano问题,并且无法获得正确的测试向量。我以为我在某些时候弄乱了字节序或其他东西。

为了弄清楚我出错的地方,我决定编译RFC1320中给出的参考实现,用调试器完成两个程序,并发挥“发现差异”。我复制/粘贴了该代码,没有任何修改,并使用-x(“测试套件”选项)运行它。

我得到了错误的测试向量。

具体来说,我得到的输出是

MD4 test suite:
MD4 ("") = 3e8ce4256176cc6f23583a774a91316c
MD4 ("a") = 40b4c066caa949d3e0576277d2d310df
MD4 ("abc") = a013c51eca433daca5b2a594d21af1fe
MD4 ("message digest") = 40de4367b3e76cee4dc5d90372ced0cf
MD4 ("abcdefghijklmnopqrstuvwxyz") = d9b9fc5aa9bfcbefac96214ae64ede8b
MD4 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 44e0908e086752b6c2b8738212ce278f
MD4 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = d219055e9ccff0c40caa7efcef86e10f

,如果您与RFC1320(或Wikipedia)上的测试向量进行比较,则完全不正确。

然后我在网上找到了md4哈希的另一个实现(this one)并且得到了相同的错误测试向量

如何开始找出错误的位置?我是否包括一些不正确的标准库?我的处理器架构错了吗?谷歌搜索不正确的哈希给我零结果,所以我必须得出结论,我是唯一一个遇到过这个问题的白痴。

真的很感激任何关于从哪里开始寻找的建议。

1 个答案:

答案 0 :(得分:2)

在@vojta的帮助下,我发现问题出在<div id="Tile_Container"> <!-- Start Row 1 --> <div id="Row"> <a id="Webmail" class="Tile" href="#" title="Webmail"> <span>Webmail</span></a> <a id="ITEM2" class="Tile" href="#" title="ITEM2"> <span>ITEM2</span></a> <a id="ITEM3" class="Tile" href="#" title="ITEM3"> <span>ITEM3</span></a> </div> </div>,其中global.h需要更改为typedef unsigned long int UINT4。在我的机器上,unsigned long int是一个64位实体,这就搞乱了一切。

(当然,typedef uint32_t UINT4也需要为UINT2提供typedef。