我有一个非常简单的程序来计算来自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位计算机上运行它。
对此的任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您从代码中获得的结果是正确的。
您引用的网站正在使用(过时的)mhash库来哈希用户输入whose "crc32" implementation uses an uncommon polynomial typically only used for Ethernet checksums。由mhash实现的哈希为" crc32b"实际上,它通常被称为CRC32。