繁体   English   中英

MD5哈希在服务器上的计算方式不同

[英]MD5 hash calculates differently on server

我正在运行一些我用C编写的代码,它从其他人编写的散列库中调用md5散列函数(md5.c&md5.h)。 我一直看到的奇怪行为是:

哈希工作完美=我哈希一个字符串,它出来的确切哈希我已经验证它与多个其他来源。

  1. 在我的OSX机器上编译和运行时,散列功能非常有效,并且计算的散列完全符合预期。

  2. 相同的代码,在基于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,这解决了这个问题。

机器似乎没有使用不同的架构(32位与64位)吗? 如果MD5实现依赖于机器字大小(我没有检查代码),这可能导致散列不同。

不同的编译器可以具有不同级别的标准合规性。 如果你遇到一个低于标准的编译器,你可能很难看到经过良好测试的代码被编译成完全不同的东西。

目标系统也可能是64位且代码具有64位可移植性问题。

解决问题的唯一方法是调试代码的两个版本的行为方式。

抱歉,没有。 如果我编译并在我的linux x86盒子上运行它,它会产生与md5sum实用程序相同的结果:

peregrino:$ md5sum csrc/Md5.c 
d27fd5f04426a3ccb2390d7517f21b9c  csrc/Md5.c
peregrino:$ bin/Md5 csrc/Md5.c 
d27fd5f04426a3ccb2390d7517f21b9c csrc/Md5.c

在我的x64盒子上:

sandiego:$ bin/Md5 src/Md5.c 
09679964608e3335c5c3e14572373eef src/Md5.c

所以它似乎是64位问题,而不是Linux问题。

你确定要以二进制模式阅读吗? 否则换行将在不同的操作系统中以不同方式转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM