MD5散列在Linux上不能产生正确的散列

问题描述 投票:1回答:1

我正在尝试使用C(code taken from here)中的md5哈希算法对某些字符串进行哈希处理,但似乎无法使其在我的Ubuntu vm上运行;每个字符串的哈希值都完全不同。

完全相同的代码在Windows 10(using this site as a reference)上也可以正常工作。我正在两个OS上都使用gcc进行编译。

是否有明显的我想念的东西?

编辑:代码示例

unsigned char buffer[16];
MDString("some test string" ,buffer);
for(int i = 0; i < 16; i++) printf("%02x" ,buffer[i]);

在Windows上:c320d73e0eca9029ab6ab49c99e9795d

在Linux上:bbd22e6dfadec16827873f1a22adf991

在网站上:c320d73e0eca9029ab6ab49c99e9795d

编辑2:

void MDString(char * string ,unsigned char * buffer)
{
  MD5_CTX context;
  unsigned char digest[16];
  unsigned int len = strlen (string);

  MD5Init(&context);
  MD5Update(&context ,string ,len);
  MD5Final(digest ,&context);

  for(int i = 0; i < 16; i++)
    buffer[i] = digest[i];
}
c linux md5
1个回答
0
投票

在64位编译中,Windows中长为32位,而在Linux中为64位。只是更改

typedef unsigned long int UINT4;

to

typedef unsigned int UINT4;

足以解决代码中最明显的问题。它仍然会为旧的函数参数形式提供警告。输出为:

c320d73e0eca9029ab6ab49c99e9795d
© www.soinside.com 2019 - 2024. All rights reserved.