CRC32对于不同的输入是相同的

标签 crc crc32

剧情简介

我使用以下方法计算几个十六进制输入的 CRC32:

http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

以及其他一些 CRC32 计算器。

问题

无论我给出什么输入,我都会得到相同的 CRC32:

aa aa 3 0 0 0 8 0 45 0 0 34 0 0 40 0 40 6 b7 e c0 a8 1 64 c0 a8 1 1 dd 95 0 50 f4 11 d8 cf 81 8e e5 e3 80 10 10 0 d6 4c 0 0 1 1 8 a f a7 bf e0 0 0 2a f9 da b3 91 bd

结果 CRC 值:0x2144DF1C

aa aa 3 0 0 0 86 dd 60 0 77 b0 1 49 11 ff fe 80 0 0 0 0 0 0 0 2 b9 df 87 1b 9a 36 ff 2 0 0 0 0 0 0 0 0 0 0 0 0 0 fb 14 e9 14 e9 1 49 36 d5 0 0 0 0 0 11 0 0 0 0 0 1 8 5f 61 69 72 70 6c 61 79 4 5f 74 63 70 5 6c 6f 63 61 6c 0 0 c 0 1 5 5f 72 61 6f 70 c0 15 0 c 0 1 8 5f 61 69 72 70 6f 72 74 c0 15 0 c 0 1 7 5f 75 73 63 61 6e 73 c0 15 0 c 0 1 8 5f 73 63 61 6e 6e 65 72 c0 15 0 c 0 1 6 5f 75 73 63 61 6e c0 15 0 c 0 1 7 5f 69 70 70 75 73 62 c0 15 0 c 0 1 4 5f 69 70 70 c0 15 0 c 0 1 5 5f 69 70 70 73 c0 15 0 c 0 1 8 5f 70 72 69 6e 74 65 72 c0 15 0 c 0 1 f 5f 70 64 6c 2d 64 61 74 61 73 74 72 65 61 6d c0 15 0 c 0 1 4 5f 70 74 70 c0 15 0 c 0 1 d 5f 61 70 70 6c 65 2d 6d 6f 62 64 65 76 c0 15 0 c 0 1 8 39 30 65 33 30 37 66 63 4 5f 73 75 62 e 5f 61 70 70 6c 65 2d 6d 6f 62 64 65 76 32 c0 15 0 c 0 1 f 5f 61 70 70 6c 65 2d 70 61 69 72 61 62 6c 65 c0 15 0 c 0 1 c0 e1 0 c 0 1 c 5f 73 6c 65 65 70 2d 70 72 6f 78 79 4 5f 75 64 70 c0 1a 0 c 0 1 0 0 29 5 a0 0 0 11 94 0 c 0 4 0 8 0 c e0 ac cb 92 66 48 c2 43 4c 9f

结果 CRC 值:0x2144DF1C

aa aa 3 0 0 0 8 0 45 0 0 34 0 0 40 0 40 6 b7 e c0 a8 1 64 c0 a8 1 1 dd 8f 0 50 f ff 68 34 80 1c a4 f9 80 10 10 10 73 b8 0 0 1 1 8 a f a7 ba c 0 0 2a 62 e1 2d 8a cd

结果 CRC 值:0x2144DF1C

问题

为什么会发生这种情况?

最佳答案

CRC 是一个常量,因为消息的最后 4 个字节是除最后 4 个字节之外的所有字节的 CRC。 CRC 是一个非零常数,在本例中为 0x2144DF1C,因为 CRC 正在进行后补(最终异或值 = 0xFFFFFFFF)。对于全零的 4 字节消息,您将获得相同的结果 (0x2144DF1C):

00 00 00 00

所发生的情况是,将 4 个字节的零与初始值 0xFFFFFFFF 进行异或,然后对 {FF FF FF FF} 计算 CRC,得到 0xDEBB20E3,将其进行后补(最终异或值 = 0xFFFFFFFF)为获取0x2144DF1C。

为了展示 CRC 最终 = 0 的情况,我对第一个和最后一个示例中的最后 4 个字节(消息 CRC)进行了补充。如果您选择 CRC32,然后单击“自定义”,然后设置最终异或值 = 0,则对于这两个示例,您将得到 CRC = 0:

aa aa 3 0 0 0 8 0 45 0 0 34 0 0 40 0 40 6 b7 e c0 a8 1 64 c0 a8 1 1 dd 95 0 50 f4 11 d8 cf 81 8e e5 e3 80 10 10 0 d6 4c 0 0 1 1 8 a f a7 bf e0 0 0 2a f9 25 4c 6e 42

aa aa 3 0 0 0 8 0 45 0 0 34 0 0 40 0 40 6 b7 e c0 a8 1 64 c0 a8 1 1 dd 8f 0 50 f ff 68 34 80 1c a4 f9 80 10 10 10 73 b8 0 0 1 1 8 a f a7 ba c 0 0 2a 62 1e D2 75 32

关于CRC32对于不同的输入是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183626/

相关文章:

delphi - DEC 5.2 CRC-32 检查失败

c++ - POSIX cksum 和 Boost.CRC

以字(16 位)作为基本变量计算 CRC

crc - 数据填充对CRC计算的影响

java.util.zip.CRC32 比较图像文件

c# - 来自 vb.net 中字符串的 CRC-16/ARC

algorithm - 4 字节散列算法比较小文本(通常小于 2 kb)

algorithm - Triple-CRC-32 对于生成非安全均匀分布哈希来说是一个坏(或不是)主意吗?

python - 在没有库的python中自定义crc32计算