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 af 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 1 c 0 1 d 5f 6 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 c015 65 0 c 76 3 0 1 f 5f 61 70 70 6c 65 2d 70 61 69 72 61 62 6c 65c0 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 af a7 b 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 af 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 af a7 b c 0 0 2a 62 1e D2 75 32
推荐阅读
- apache-spark-sql - Spark SQL 中的多表广播
- c# - 如何在 C# 中对 AForge 摄像头连接或摄像头断开做出反应?
- javascript - 为行中的任何字段输入信息后,如何添加必填字段,该行中的所有字段也应为必填项
- python - 从具有不同顺序的列表创建字典
- c++ - Ubuntu 20.04 上带有 boost-thread 的 Clang 10 链接错误
- java - 如何使用身份验证 JWT Bearer Java Spring 请求 Feign?
- php - AWS Elastic Bean Stalk,错误 403 Forbidden “您无权访问此资源。”
- azure - New-SqlAzureKeyVaultColumnMasterKeySettings 的替代方案
- python - 使用 h5py 压缩现有 HDF5 数据集并释放空间,无需复制或使用 h5repack
- c++ - 将函数指针分配给 constexpr 结构中的 typedef 函数的正确 C++ 方法是什么?