【发布时间】:2010-10-16 09:22:29
【问题描述】:
我正在运行一些我用 C 编写的代码,它从其他人编写的散列库(md5.c 和 md5.h)中调用 md5 散列功能。我看到的奇怪行为是:
散列工作完美 = 我对一个字符串进行散列,结果得到我已验证它与多个其他来源的确切散列。
散列功能有效 编译和运行时完美 在我的 OSX 机器和散列 完全按照它应该计算的那样计算 是。
相同的代码,未上传任何更改 并基于Linux编译 服务器,它计算一个不同的 (错误的)哈希。
有没有人知道这到底是怎么可能的?过去一周一直在疯狂,我不明白为什么这是可能的。我还在另一台机器上对其进行了测试,编译并执行,它运行良好。只是当我将它上传到服务器时,哈希不再正确。
哈希函数文件可以在以下位置找到: http://people.csail.mit.edu/rivest/Md5.c
已解决:谢谢大家 这是 64 位架构问题。调试时突然想到这一点,真是太烦人了.......
【问题讨论】:
-
澄清一下,您的意思是应该对 MD5 散列函数进行库调用的编译代码返回错误的结果?如果是这样,您是否确认在服务器和本地都提供了相同的 input?你可以在发送之前调试打印吗?
-
是的,我没有更改的编译代码,我只是上传到服务器给我一个不同的哈希结果。我什至放入了一个永远不会改变的静态变量,并在函数调用之前验证了输入,它给了我两个不同的哈希值。很奇怪。
-
请您澄清一下 - 您上传二进制文件还是上传源代码并编译?
-
对已接受答案的一点更新。要更改的行现在位于 global.h,line 22。