CRC-32 是 32 位循环冗余校验,用来发现意外的数据损坏,不是密码学哈希,也不能防故意篡改。下面重点说明分步原理。
CRC32怎样一步步运算
CRC 把数据看作二进制多项式,按约定多项式做除法,余数即为校验值。实现上多用 256 项表加速。Python zlib.crc32 与以太网/PNG 使用相同参数:初值 0xFFFFFFFF,末尾再异或 0xFFFFFFFF,多项式反转形式为 0xEDB88320。
示例
输入:Hello
计算结果:f7d18982(十进制 4157704578)
说明:CRC-32(与 PHP hash("crc32b")、ZIP/以太网常用的反转多项式 0xEDB88320 一致)。
命令行示例
python3 -c "import zlib; print(format(zlib.crc32(b'abc') & 0xffffffff,'08x'))"
php -r 'echo hash("crc32b","abc"), PHP_EOL;'
常用参数
多项式与反射方式、初值、最终异或、输出整数或十六进制。
本站的哈希全家桶工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【Python 里为什么有时是负数?】zlib.crc32 返回有符号区间,用 & 0xFFFFFFFF 再格式化即可。
【和 Adler-32 有什么不同?】Adler-32 是另一种校验和(zlib 常用),更简单,查错能力也不同。
【“abc”的 CRC-32 是多少?】352441c2(crc32b / zlib)。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发