我正在尝试使用C语言中的md5哈希算法对一些字符串进行哈希(代码从此处获取),但是似乎无法使其在我的Ubuntu vm上运行;对于每个字符串,我得到的哈希值完全不同。
完全相同的代码在Windows 10上也可以正常工作(使用此站点作为参考)。我正在两个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];
}
在64位编译中,Windows中的long是32位,而在Linux中是64位。只是改变
typedef unsigned long int UINT4;
至
typedef unsigned int UINT4;
足以解决代码中最明显的问题。它仍然会为旧的函数参数形式提供警告。输出为:
c320d73e0eca9029ab6ab49c99e9795d
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句