【问题标题】:I am looking for standardised test vectors for a CRC32 algorithm implementation我正在寻找用于 CRC32 算法实现的标准化测试向量
【发布时间】:2014-02-02 07:40:46
【问题描述】:

我不得不替换我正在处理的系统上的 CRC32 实现,之前实现的算法使用大小为 256 的查找表,并且太大而无法在引导加载程序中使用。我实现的新算法使用大小为 16 的查找表。

我使用与以前相同的多项式,但结果不同。在线计算器会抛出更多随机结果,其中大多数都不太清楚他们在做什么,即他们使用的是哪个多项式,输入数据是什么格式或初始 crc 值是什么。

有谁知道我在哪里可以找到用于 CRC32 实现的可靠、标准化的测试向量?

谢谢!

【问题讨论】:

    标签: algorithm crc crc32 error-detection data-link-layer


    【解决方案1】:

    是的,this catalog of CRCs。每个 CRC 定义都包含一个 check 值 - 这是 CRC 对 ASCII / UTF-8 输入的九字节字符串“123456789”的输出。例如,CRC-32("123456789", 9) = 0xcbf43926。

    您为什么不简单地将您的新实现与旧实现进行比较?

    【讨论】:

    • @codeling:这不是答案中的唯一信息。答案是比较新旧。他已经拥有一个使用旧算法的测试向量生成器。该链接是奖金信息。
    • 嗯,当我评论时,链接仍然是唯一的信息,请参阅历史记录。但实际上,在我看来,这个链接正是 OP 所要求的,所以我今天的自己现在可以接受这个答案;)。顺便说一句,投反对票的不是我。
    • 这确实可能是 CRC 实现的目录,但不是测试向量。
    • @AntonSamsonov 每个定义都有一个测试向量。校验值是该定义的九字节字符串“123456789”的CRC。 OP 要求提供用于 CRC32 实现的测试向量。
    【解决方案2】:

    没有任何标准化,只是为了方便而收集:

    // Trivial one.
    UINT32_C(0x00000000), ""
    
    // Source: https://rosettacode.org/wiki/CRC-32
    UINT32_C(0x414FA339), "The quick brown fox jumps over the lazy dog"
    
    // Source: http://cryptomanager.com/tv.html
    UINT32_C(0x9BD366AE), "various CRC algorithms input data"
    
    // Source: http://www.febooti.com/products/filetweak/members/hash-and-crc/test-vectors/
    UINT32_C(0x0C877F61), "Test vector from febooti.com"
    

    如果您的结果不匹配怎么办?请务必检查您正在实施和比较的 CRC 的风味,可以在“CRC32 Checksums; The Good, The Bad, And The Ugly”文章中找到此类挖掘的一个很好的示例,其中显示某些程序可能会做额外的在其他相同操作之后进行处理,例如通过校验和传输消息的长度,可能或可能不在文档中涵盖。

    【讨论】:

      【解决方案3】:

      Ironclad 存储库有一些可能有用的测试向量:

      ;;; standard tests for crc32
      
      (:digest-test #a"" #h"00000000")
      (:digest-test #a"a" #h"e8b7be43")
      (:digest-test #a"abc" #h"352441c2")
      (:digest-test #a"message digest" #h"20159d7f")
      (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"4c2750bd")
      (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"1fc2e6d2")
      (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"7ca94a72")
      

      https://github.com/froydnj/ironclad/blob/master/testing/test-vectors/crc32.testvec

      zlib-ng 中也有一些测试:

      https://github.com/zlib-ng/zlib-ng/blob/develop/test/crc32_test.c

      【讨论】:

        猜你喜欢
        • 2015-06-27
        • 2012-04-29
        • 1970-01-01
        • 2011-02-07
        • 2016-03-13
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多