piapia123
zh

CRC-32 校验码计算

编码

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

算出文本的 CRC-32 校验值。CRC 是最常见的一类检错码 —— 它不防篡改(没有密钥,谁都能重算),但能可靠地发现传输和存储中的意外损坏:网络报文、压缩包、磁盘扇区、固件镜像都在用它做完整性校验。要留意的是「CRC-32」并不是一个固定的算法,而是一族:同一个多项式配上不同的初始值、输入输出是否按位反转、结果异或值,就得到互不兼容的校验值,而它们算出来的数字毫无关系。这里把六个常用变体都列了出来,切换时下方会说明各自用在哪里。输入按 UTF-8 字节处理,结果与 zlib、与各家工具逐位一致。

功能

  • 六个变体:IEEE 802.3、Castagnoli(CRC-32C)、Koopman、BZIP2、JAMCRC、MPEG-2
  • 输出十六进制(可切大小写)或十进制
  • 中文按 UTF-8 字节计算,与 zlib、与各语言的实现一致
  • 每个变体标注用途 —— 换之前先看清对面系统用的是哪一个
  • 查表实现,几 MB 的输入也是毫秒级
  • 计算只在本机进行,内容不会上传

使用方法

  1. 把内容粘贴进输入框,结果实时出现
  2. 按对面的系统选变体(默认 IEEE,也就是平时说的 CRC-32)
  3. 按需切换十六进制 / 十进制与大写
  4. 点「复制」取走校验值

常见问题

CRC-32、CRC-32C、CRC-32K 有什么区别?
多项式不同,所以同一份数据算出来是三个完全不同的值。CRC-32(IEEE 802.3)是最常见的那个,zip、gzip、PNG 都用它;CRC-32C(Castagnoli)用在 iSCSI、SCTP、ext4 和一批存储系统上,它的多项式经过挑选,硬件实现更快;CRC-32K(Koopman)的检错能力在所有 32 位 CRC 里最强,用于对可靠性要求高的场合。选哪个完全取决于对面的系统,不能凭喜好。
为什么我算的和网上其他工具不一样?
九成是变体选错了。同样是 CRC-32,加上初始值、是否反转、结果异或值这三个参数,就能派生出六个互不兼容的算法,而它们给出的都是「格式正确的 8 位十六进制」。先确认对面用的是哪个变体(多数协议文档会写明,或给出一个「输入 123456789,输出是多少」的验证值),再来对本工具的选项。本工具每个变体的检定值都与 CRC 参数目录一致。
CRC 能当哈希或签名用吗?
不能。CRC 的设计目标是发现意外错误(传输噪声、位翻转),不是抵抗有意篡改 —— 它没有密钥,任何人都能对改过的数据重算出一个正确的校验值。要防篡改请用 HMAC 或数字签名;要校验「文件有没有下坏」用 CRC 或 SHA-256 都可以,但既然 SHA-256 同样便宜,现在的通行做法是直接用它。
为什么空输入的校验值不是全零?
因为变体带初始值。CRC-32 的初始值是 0xFFFFFFFF,空输入时它与结果异或值 0xFFFFFFFF 恰好抵消,所以得到 00000000;而 CRC-32/MPEG-2 的结果异或值是 0,空输入就得到 FFFFFFFF。这几个参数正是各变体「看起来都是 CRC-32 却互不兼容」的来源。本工具对空输入返回空串,不显示校验值 —— 那通常只是还没粘贴内容。

相关工具