CRC32(C)能否回归0?

时间:2014-08-29 17:58:56

标签: crc crc32

我想知道CRC32 sum和CRC32C是否会回归0?给定足够大的数据集,简单的答案将是“是”。但是,我想知道CRC32C标准中是否有任何配置可以明确地防止这种情况发生。

这个用例就是我需要能够检查远程文件是否为空,而我所拥有的只是CRC32C校验和。所以,换句话说,我可以推断,如果CRC32C为0,则保证文件为空。

如果可能,请提供有关此定义的标准的任何参考。

3 个答案:

答案 0 :(得分:22)

@Yanek几乎完全正确。

为了好玩,这里有一个五字符序列,CRC-32C为零:DYB|O。这是一个十六进制的四字节序列,给出零:ab 9b e0 9b。实际上,这是唯一可以这样做的四字节序列。没有三字节或更短的序列会给你零。这就是@Yanek不完全正确的地方,因为对于三字节或更短的序列,零不太可能。在这些情况下,获得零的概率为零。

答案 1 :(得分:17)

零与CRC32校验和的任何其他值一样可能。 CRC基本上是将整个输入(作为一个大二进制数)除以预选值的余数。如果输入恰好可被该值整除,则余数和CRC值为零。

答案 2 :(得分:0)

这个怎么样,不是32位CRC,但是:

newList.addAll(thisList)

或者:

1011 | 110011001010.000
       1011
       ----
        1111
        1011
        ----
         1001
         1011
         ----
           1000
           1011
           ----
             1110
             1011
             ----
              1011
              1011
              ----
                  0000 (...)
                  1011
                  ----
                  1011
                  1011
                  ----
                  0000