我正在运行一些用C语言编写的代码,该代码从其他人编写的哈希库(md5.c和md5.h)中调用md5哈希功能。我一直看到的奇怪行为是:
散列工作完美=我对一个字符串进行了散列,它得出的确切散列证明了我已将其与其他多个来源一起使用。
当在我的OSX机器上编译和运行时,散列功能可以完美地工作,并且所计算的散列完全符合应有的方式。
相同的代码,没有更改在基于Linux的服务器上上载和编译,并且计算出不同的(错误的)哈希。
有谁对这将如何实现有任何见识?在过去的一周中,它一直在疯狂发展,我不明白为什么这是可能的。我也已经在另一台机器上对其进行了测试,编译和执行,并且效果很好。当我将其上传到服务器时,哈希值不再正确。
哈希功能文件可以在以下位置找到:http : //people.csail.mit.edu/rivest/Md5.c
解决:谢谢大家,这是64位拱门问题。令人烦恼的是,我在调试时考虑了一下……。
尝试更换(Md5.c第41行)
typedef unsigned long int UINT4;
通过
typedef uint32_t UINT4;
(如果需要,请包括stdint.h)
在64位计算机上,long int(通常)为64位而不是32位
编辑 :
我尝试使用64位opteron来解决此问题。