ZLIB似乎在C中返回CRC32B而不是CRC32

时间:2016-08-17 20:04:41

标签: c linux hash crc32

我有一个非常简单的程序来计算来自stdin的输入字符串的CRC32,并且由于某种原因我没有得到CRC32,而是CRC32B。

这是我的代码

int main( int argc, char *argv[] ) { 

  unsigned long crc=0L;
  unsigned char *stdinput = malloc(1024);

  crc = crc32( 0L, Z_NULL, 0 );

  fgets(stdinput, 1024, stdin);

  crc = crc32( crc, stdinput, strlen(stdinput) - 1 );
  printf("%s 0x%08x\n", stdinput, crc );

}

我知道程序中存在溢出问题,但这不一定是我的问题。

问题是输出是这样的

回声测试| ./crc32 结果是 0xd87f7e0c

而不是0xaccf8b33 在这里验证https://www.tools4noobs.com/online_tools/hash/

zlib的输出肯定是使用CRC32B而不是CRC32。

我如何修改它以便获得正确的输出?

我在Debian 64位计算机上运行它。

对此的任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

您从代码中获得的结果是正确的。

您引用的网站正在使用(过时的)mhash库来哈希用户输入whose "crc32" implementation uses an uncommon polynomial typically only used for Ethernet checksums。由mhash实现的哈希为" crc32b"实际上,它通常被称为CRC32。