CRC32C的测试向量

6
我正在为CRC计算库编写测试工具,并且我正在寻找CRC-32C的参考测试向量。我找到了很多CRC-32的向量,但是没有CRC-32C的。请问是否有人可以提供一个参考?
我已经使用这个网址上的在线计算器计算出这些值:
crc32c("") = 0
crc32c("The quick brown fox jumps over the lazy dog") = 0x22620404

然而,我甚至不确定我的设置是否正确。我只需要一个可靠来源的参考,提供像这样的少量测试向量。

x86 CRC32指令使用CRC32C。如果需要,您可以创建一个简单的程序来生成自己的参考文献。但是,您仍然需要像Mark的答案一样的预先准备好的参考文献来检查您的参考文献检查器。 - srking
这是一个在线检查器:http://checksumcalc.live.conceptcontrols.com/ 你需要的CRC32C值在表格中是小端逆序的0x82F63B78。 - Tobu
@Tobu 很好,谢谢。 - dtoux
4个回答

9

这个CRC目录提供了ASCII字符序列"123456789"(不含引号)的CRC-32C校验值为0xe3069283


我自己也看到了这个页面,但是我无法弄清楚测试序列是什么 :-) 感谢您的澄清。 - dtoux
...是的,原问题中的值是正确的 :-) - dtoux
传统参数的解释如check在此处:https://reveng.sourceforge.io/crc-catalogue/legend.htm#crc.legend.params - Raman
@Raman 嗯,实际上它们只是用标准符号写成的数字。不是大端或小端。如果你愿意,我想你可以把十六进制数分成一对一对的数字。但它们并没有被分成一对一对的数字。这里没有字节 - 只有十六进制的整数。 - Mark Adler
澄清一下,您提到的0xe3069283只是十六进制整数校验和的观点已经被接受。然而,我认为我的评论仍然有效,因为在内存中,0xe3069283同样可以被解释为4个字节的序列,这时了解字节顺序就变得很重要。 - Raman
显示剩余2条评论

6

请注意:此文档中的校验和采用小端序。 - Raman

2
这里是一个“我也是”的答案,提供了一些可以直接使用而无需解析标准的值。这些值已经与Adler的MAKECRC.C和Intel的CRC内置函数进行了交叉验证。
Adler的实现被修改为使用0x82F63B78多项式,其系数如下:
/* terms of polynomial defining this crc (except x^32): */
static int p[] = {0,6,8,9,10,11,13,14,18,19,20,22,23,25,26,27,28};

以下是字符串/CRC-32C配对。请注意字节顺序。下面的答案是在小端机器上一字节一字节地提取的,就像传统摘要一样呈现。

{"", "\x00\x00\x00\x00"}
{"a", "\x30\x43\xd0\xc1"}
{"abc", "\xb7\x3f\x4b\x36"}
{"message digest", "\xd0\x79\xbd\x02"}
{"abcdefghijklmnopqrstuvwxyz", "\x25\xef\xe6\x9e"}
{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "\x7d\xd5\x45\xa2"}
{"12345678901234567890123456789012345678901234567890123456789012345678901234567890", "\x81\x67\x7a\x47"}
{"123456789", "\x83\x92\x06\xe3"}

-1
对于从谷歌上匆匆浏览而来的任何人:
请注意,这些测试是针对CRC32C,而不是CRC32CRC32C使用了不同的多项式,因此您的测试将失败。我曾经吃过这个亏。

这是多余的。问题和所有现有的答案都清楚地表明他们在谈论CRC32C而不是CRC32。如果通过谷歌搜索进入这里的人不打算阅读问题和其他投票较高的答案,你认为他们会注意到列表底部的这个答案吗?(每个人都必须吃一堑才会明白,你需要仔细阅读事物。很少有人这样做 :-) ) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接