CRC 校验和计算器(CRC-8/16/32/64)
指导
CRC 校验和计算器
可立即为文本或文件输入计算循环冗余校验(CRC)值,支持来自 CRC-8、CRC-16、CRC-32 和 CRC-64 家族的15种标准化变体。可用于验证下载、校验串行协议帧或确认文件完整性,无需上传任何内容——所有计算均在您的浏览器中本地运行。
如何使用
- 在输入区域输入或粘贴文本, 或 将文件拖放到上传器中。
- 从下拉菜单中选择一个CRC变体。默认选择的是CRC-32(IEEE 802.3)——这也是以太网、ZIP和PNG所使用的算法。
- 切换HEX、十进制和二进制输出格式,以匹配您正在比较的内容。
- 可选择性地将预期校验和粘贴到 验证 字段中。支持十六进制(
0xCBF43926)、十进制或二进制值,空格或冒号会被忽略。 - 校验和会随着您输入内容或调整选项而实时更新。
特征
- 15种CRC变体 ——CRC-8、CRC-8/ITU、CRC-8/MAXIM、CRC-8/ROHC、CRC-16/CCITT-FALSE、CRC-16/XMODEM、CRC-16/IBM(ARC)、CRC-16/MODBUS、CRC-16/USB、CRC-32(IEEE/以太网/ZIP)、CRC-32/BZIP2、CRC-32C(Castagnoli)、CRC-32/MPEG-2、CRC-64/ECMA-182 和 CRC-64/ISO。
- 文本或文件输入 ——可直接粘贴字符串或拖放任意类型的文件;计算器会精确读取磁盘上的字节。
- 实时输出 ——HEX、十进制和二进制表示会随着您输入内容而实时更新,每个格式均可单独切换。
- 预期值验证 ——粘贴一个参考校验和以确认您的文件或数据包与已知良好值匹配。
- 灵活解析 ——预期值可接受
0x,0b、原始数字或容忍空格、冒号和下划线。 - 仅客户端 ——无需上传到服务器,因此您可以安全地对敏感或专有文件进行校验。
常问问题
-
什么是CRC,它与加密哈希有何不同?
循环冗余校验(CRC)将输入消息视为一个大二进制多项式,并除以一个固定的生成多项式;余数即为校验和。CRC旨在检测传输或存储中的偶然错误——如位翻转、字节丢失或位段错位——并且效率非常高。加密哈希(如SHA-256)解决的是另一个问题:它们具有抗碰撞性,并且旨在抵抗恶意篡改。CRC速度快且数学上可预测,但极易伪造,因此绝不能用于安全目的。
-
为什么有这么多CRC-16和CRC-32变体?
不同的标准机构和厂商选择了不同的生成多项式、初始寄存器值、位反射设置和最终异或值,以满足各自的错误检测需求。以太网、ZIP和PNG都采用了CRC-32(IEEE 802.3),而工业协议如MODBUS、USB和XMODEM则各自标准化了其特有的CRC-16变体。如果任何参数不同,即使位宽相同,两种变体对相同输入也会产生完全不同的校验和,因此选择与目标系统匹配的精确变体至关重要。
-
CRC规范中的“反射输入和输出”是什么意思?
反射(有时称为反转)变体以每个字节的最低有效位为起点处理数据,并在应用输出异或前逐位翻转最终寄存器。非反射变体则以最高有效位顺序处理位。这一选择最初源于硬件设计,其中向一个方向移位寄存器比另一个方向更便宜。具有相同多项式但不同反射设置的CRC不兼容——CRC-32和CRC-32/BZIP2共享相同的0x04C11DB7多项式,却产生完全不同的值。
-
CRC-32C与标准CRC-32有何不同,以及在什么情况下使用?
CRC-32C由Guy Castagnoli于1993年提出,使用多项式0x1EDC6F41,而非0x04C11DB7。其对短数据包的错误检测性能在数学上更优,且现代x86处理器直接在单条CRC32指令中实现该算法。它被用于iSCSI、SCTP、ext4元数据、Btrfs以及Google的gRPC帧层。当需要高吞吐量和强错误检测时,系统越来越多地优先选择CRC-32C而非经典的以太网CRC。
-
CRC能否检测到所有可能的错误,它的局限性是什么?
没有任何错误检测码能检测到所有错误。一个n位CRC能检测到所有长度不超过n位的突发错误和所有单比特错误,但大约1/2^n的随机错误会逃逸检测。对于CRC-32,约为1/43亿——对于普通文件和帧完整性来说已经非常出色。对于超大文件或长距离存储,CRC-64将这一界限扩展到大约1/1.8×10^19。针对恶意篡改的情况则不同:攻击者总能调整消息使其CRC匹配一个选定的值,因此校验和绝不能替代数字签名用于身份验证。
