CRC-32 是 32 位循环冗余校验,用来发现意外的数据损坏,不是密码学哈希,也不能防故意篡改。下面重点说明安全定位。
CRC32是不是加密
CRC 不能还原数据,只能重新计算并比较。
- PHP hash("crc32") 和 hash("crc32b") 结果不同,对接时要写明
- 不要拿 CRC 当密码哈希
示例
输入:123问
计算结果:eec6b01f(十进制 4005998623)
说明:CRC-32(与 PHP hash("crc32b")、ZIP/以太网常用的反转多项式 0xEDB88320 一致)。
怎么选
文件格式或协议规定用 CRC-32 时按规定实现;需要防篡改请用 SHA-256 或带密钥的 HMAC。
CRC-32 比 MD5/SHA 快、结果更短,但不是单向安全哈希:攻击者可以刻意改数据并保持 CRC 不变。MD5/SHA 用于“可能面对恶意修改”的场合,CRC 只用于随机错误。
Go 示例
下面是 Go 中处理CRC32的常用写法:
import "hash/crc32"
crc32.ChecksumIEEE([]byte("abc"))运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的哈希全家桶工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【为什么和网上工具不一致?】多半不是同一种 CRC-32 变体,或字符串带了换行。
【Python 里为什么有时是负数?】zlib.crc32 返回有符号区间,用 & 0xFFFFFFFF 再格式化即可。
【和 Adler-32 有什么不同?】Adler-32 是另一种校验和(zlib 常用),更简单,查错能力也不同。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。