MD5 哈希不会在 Linux 上生成正确的哈希
MD5 Hash Doesn't Produce Correct Hash on Linux
我正在尝试使用 C 中的 md5 散列算法对一些字符串进行散列处理 (code taken from here),但似乎无法在我的 Ubuntu 虚拟机上运行;我为每个字符串得到完全不同的哈希值。
完全相同的代码在 Windows 10 (using this site as a reference) 上工作得很好。我在两个oss上都用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 位编译中,long 在 Windows 中是 32 位,而在 Linux 中是 64 位。刚刚改变
typedef unsigned long int UINT4;
至
typedef unsigned int UINT4;
足以解决代码中最明显的问题。它仍然对旧的函数参数形式发出警告。输出为:
c320d73e0eca9029ab6ab49c99e9795d
我正在尝试使用 C 中的 md5 散列算法对一些字符串进行散列处理 (code taken from here),但似乎无法在我的 Ubuntu 虚拟机上运行;我为每个字符串得到完全不同的哈希值。
完全相同的代码在 Windows 10 (using this site as a reference) 上工作得很好。我在两个oss上都用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 位编译中,long 在 Windows 中是 32 位,而在 Linux 中是 64 位。刚刚改变
typedef unsigned long int UINT4;
至
typedef unsigned int UINT4;
足以解决代码中最明显的问题。它仍然对旧的函数参数形式发出警告。输出为:
c320d73e0eca9029ab6ab49c99e9795d