CRC-32 是 32 位循环冗余校验,用来发现意外的数据损坏,不是密码学哈希,也不能防故意篡改。下面重点说明公式与推导。
CRC32的计算公式
输出永远 32 位。它能可靠发现偶发比特翻转,但对恶意构造的碰撞几乎没有防线。
输入:Hello
计算结果:f7d18982(十进制 4157704578)
说明:CRC-32(与 PHP hash("crc32b")、ZIP/以太网常用的反转多项式 0xEDB88320 一致)。
工作原理
CRC 把数据看作二进制多项式,按约定多项式做除法,余数即为校验值。实现上多用 256 项表加速。Python zlib.crc32 与以太网/PNG 使用相同参数:初值 0xFFFFFFFF,末尾再异或 0xFFFFFFFF,多项式反转形式为 0xEDB88320。
Go 示例
下面是 Go 中处理CRC32的常用写法:
import "hash/crc32"
crc32.ChecksumIEEE([]byte("abc"))运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的哈希全家桶工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【CRC-32 安全吗?】只适合发现意外损坏,不能防故意伪造。
【为什么和网上工具不一致?】多半不是同一种 CRC-32 变体,或字符串带了换行。
【Python 里为什么有时是负数?】zlib.crc32 返回有符号区间,用 & 0xFFFFFFFF 再格式化即可。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发