CRC32C 的测试向量

Posted

技术标签:

【中文标题】CRC32C 的测试向量【英文标题】:Test vectors for CRC32C 【发布时间】:2014-01-24 16:22:02 【问题描述】:

我正在为 CRC 计算库编写测试工具,并且正在寻找 CRC-32C 的参考测试向量。我发现很多 CRC-32 但没有专门针对 CRC-32C。有人可以指点我参考吗?

我设法使用来自this url 的在线计算器计算了这些值:

crc32c("") = 0
crc32c("The quick brown fox jumps over the lazy dog") = 0x22620404

但是,我什至不确定我的设置是否正确。我所需要的只是一个可靠来源的参考,它可以提供很少的测试向量。

【问题讨论】:

x86 CRC32 指令使用 CRC32C。如果需要,您可以创建简单的程序来生成您自己的参考。您仍然需要像 Mark 的回答这样的预烘焙参考来参考检查您的参考检查器。 这是一个在线检查器:checksumcalc.live.conceptcontrols.com 您需要的 CRC32C 值是 little-endian,在表中反转为 0x82F63B78。 @Tobu 非常好,谢谢。 【参考方案1】:

CRC catalog 为 ASCII 字符序列的 CRC-32C 提供了 0xe3069283 的校验值:“123456789”(不带引号)。

【讨论】:

我自己看到了这个页面,但我不知道测试顺序是什么 :-) 感谢您清除这个。 ...是的,原始问题中的值检查:-) 图例参数的解释,即check在这里:reveng.sourceforge.io/crc-catalogue/… 仅供参考:此目录中的校验和采用大端(网络)顺序。 @Raman 好吧,实际上它们只是用标准符号编写的数字。不是大端或小端。如果你愿意,我想可以想象成对的十六进制数字。但它们并没有成对分开。没有字节——只有十六进制的整数。【参考方案2】:

这里是来自 RFC3720 的测试数据,它使用 crc32c。

https://www.rfc-editor.org/rfc/rfc3720#appendix-B.4

【讨论】:

仅供参考:本文档中的校验和按小端顺序排列。【参考方案3】:

这是一个“mee too”答案,其中包含一些您可以在不解析标准的情况下使用的值。与 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 对。注意字节序。下面的答案是在 little-endian 机器上逐字节提取的,就像呈现传统摘要一样。

"", "\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"

【讨论】:

以上是关于CRC32C 的测试向量的主要内容,如果未能解决你的问题,请参考以下文章

在 Alpine 上安装 crcmod CRC32C C 扩展

在软件中实现 SSE 4.2 的 CRC32C

在软件中实现 SSE 4.2 的 CRC32C

可以使用 CRC32C 作为基础构造一个“好”的哈希函数吗?

CRC32(C) 可以返回 0 吗?

SIMD 零向量测试