CRC-32 是 32 位循环冗余校验,用来发现意外的数据损坏,不是密码学哈希,也不能防故意篡改。下面重点说明对比要点。
CRC32区别在哪
CRC-32 比 MD5/SHA 快、结果更短,但不是单向安全哈希:攻击者可以刻意改数据并保持 CRC 不变。MD5/SHA 用于“可能面对恶意修改”的场合,CRC 只用于随机错误。
示例
输入:123问
计算结果:eec6b01f(十进制 4005998623)
说明:CRC-32(与 PHP hash("crc32b")、ZIP/以太网常用的反转多项式 0xEDB88320 一致)。
核心要点
- 输出 32 位,8 个十六进制字符或一个无符号整数
- “abc”的 CRC-32(crc32b)是 352441c2
- 空数据的 CRC-32 是 00000000
- 存在多种 CRC-32 变体(初始值、是否异或输出、多项式是否反转),名称要写清楚
- 不能当哈希用在签名或密码上,造冲突非常容易
注意事项
- PHP hash("crc32") 和 hash("crc32b") 结果不同,对接时要写明
- 不要拿 CRC 当密码哈希
- 初始值和是否取反会彻底改变结果
- 把有符号 32 位整数(有的语言 CRC 返回负数)格式化成十六进制时要先转成无符号
本站的哈希全家桶工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【“abc”的 CRC-32 是多少?】352441c2(crc32b / zlib)。
【CRC-32 安全吗?】只适合发现意外损坏,不能防故意伪造。
【为什么和网上工具不一致?】多半不是同一种 CRC-32 变体,或字符串带了换行。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。