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

标签 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 位机器上运行它。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

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

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

关于c - ZLIB 似乎在 C 中返回 CRC32B 而不是 CRC32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39005351/

相关文章:

java - 使用 hashmap 的空间复杂度。应该考虑 key 大小吗?

c - 二维数组和指针有什么关系?

c - Ansi C 中的匿名结构声明符是否合法?

c - 如何在 C 中正确地重新分配二维数组?

linux - 处理由 epoll 管理的套接字关闭的安全方法

python - 使用 Sklearn featurehasher

为 C 代码创建 makefile,在没有 ./的情况下运行

linux - 域 SSO(win -> linux -> AD)

linux - 使用 find 命令删除超过特定时间的多个扩展名

md5 - 将整个哈希范围拆分为 n 个相等的范围