CRC32开发入门

39 0

CRC-32 是 32 位循环冗余校验,用来发现意外的数据损坏,不是密码学哈希,也不能防故意篡改。下面重点说明从概念到动手。

CRC32开发入门

CRC 把数据看作二进制多项式,按约定多项式做除法,余数即为校验值。实现上多用 256 项表加速。Python zlib.crc32 与以太网/PNG 使用相同参数:初值 0xFFFFFFFF,末尾再异或 0xFFFFFFFF,多项式反转形式为 0xEDB88320。

  1. 用 Python zlib.crc32 或 PHP hash("crc32b") 计算并格式化为 8 位十六进制
  2. 与文件格式要求的变体对照,ZIP/PNG 通常就是这一种
  3. 不要用 CRC 代替 SHA-256 做安全校验

示例

输入:你好,世界

计算结果:acf5da54(十进制 2901793364)

说明:CRC-32(与 PHP hash("crc32b")、ZIP/以太网常用的反转多项式 0xEDB88320 一致)。

注意事项

  • PHP hash("crc32") 和 hash("crc32b") 结果不同,对接时要写明
  • 不要拿 CRC 当密码哈希
  • 初始值和是否取反会彻底改变结果
  • 把有符号 32 位整数(有的语言 CRC 返回负数)格式化成十六进制时要先转成无符号

常见报错

  • 与对方结果不同:变体(crc32 / crc32b)或端序不一致
  • Java 的 int 打印成负数:先与 0xFFFFFFFFL 再格式化
  • 误用 CRC 做安全校验

本站的哈希全家桶工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【CRC-32 安全吗?】只适合发现意外损坏,不能防故意伪造。

【为什么和网上工具不一致?】多半不是同一种 CRC-32 变体,或字符串带了换行。

【Python 里为什么有时是负数?】zlib.crc32 返回有符号区间,用 & 0xFFFFFFFF 再格式化即可。

文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: 数码开发

抱歉,评论功能暂时关闭!