首页/安全/加密与证书速查/CRC 与密码学哈希的区别
加密算法基础95 条

CRC 与密码学哈希的区别

CRC 用于检测传输或存储错误,线性结构便于硬件实现但不具备抗碰撞性;SHA-2/SHA-3 等密码学哈希用于安全完整性,两者用途不能互换。

加密与证书速查安全更新于 2026-10-13

CRC 与哈希的区别

CRC 与密码学哈希都会输出定长摘要,但目标完全不同。CRC 是线性校验码,用于发现传输或存储中的随机错误,设计目标是快速与易于硬件实现,攻击者可以轻易构造出校验值相同的不同内容;SHA-2、SHA-3 等密码学哈希则要求抗碰撞与抗前像,用于签名、证书指纹与 HMAC。

基本信息

典型算法CRC-32、CRC-16、Adler-32 与 SHA-256、SHA-3、BLAKE2
数学结构CRC 为线性反馈移位,哈希为非线性压缩
抗篡改CRC 不具备,哈希具备(在设计强度内)
常见位置ZIP、PNG、以太网 FCS 用 CRC;签名与证书用哈希
输出长度CRC-32 为 32 位,SHA-256 为 256 位

典型使用场景

  • 下载固件后校验:厂商同时给出 SHA-256 与 CRC 时应以哈希为准
  • 文件格式内部校验:ZIP 与 PNG 用 CRC 检测存储损坏
  • 链路层差错检测:以太网帧尾 FCS 使用 CRC-32
  • 代码签名与证书指纹:必须使用 SHA-256 及以上哈希
  • 接口签名:需要 HMAC 而非裸哈希,避免长度扩展与伪造

校验命令对照

校验命令对照
sha256sum firmware.bin               # 密码学哈希,安全校验用
shasum -a 512 firmware.bin           # SHA-512
cksum firmware.bin                   # POSIX 校验和(CRC 变体)
crc32 firmware.bin                   # 部分发行版提供
openssl dgst -sha256 firmware.bin    # 与 sha256sum 等价

维度对照

维度CRC32 / Adler-32密码学哈希
目标检测随机错误抗篡改与抗碰撞
碰撞难度可构造同校验值内容就现有算力不可行
速度很快,硬件实现简单中等,有加速时也很快
典型用途ZIP、以太网 FCS签名、HMAC、证书指纹
安全相关场景不要用 CRC32 校验:攻击者可以构造出校验值相同的伪造内容,下载站点若只提供 CRC 校验值,等于没有防篡改能力。
哈希能发现篡改但不能证明来源,任何人都能对伪造内容重算哈希;防伪造需要签名或 HMAC,密钥不参与时哈希只是一致性检查。

选择判据

  • 需要防篡改与防伪造:用 SHA-256 及以上哈希或 HMAC,不用 CRC
  • 只需发现传输误码:CRC 足够且实现成本更低
  • 需要高速软件校验:CRC-32C 有成熟的快速实现
  • 需要与硬件协处理器配合:CRC 有现成的硬件支持
「校验和」一词常被混用:TCP 首部校验和、IP 首部校验和与 CRC 一样只防随机错误,不防主动篡改;把这类字段当作安全机制是常见误解。

易错点

  • 把 CRC32 当防篡改手段:构造同校验值内容的时间成本极低,安全校验必须用密码学哈希
  • 用裸哈希做接口签名(如 sha256(secret+body)):Merkle-Damgård 结构存在长度扩展风险,应改用 HMAC
  • 只比对摘要值而不校验来源:与文件同一通道获取的摘要无法发现篡改
  • 混淆哈希与加密:哈希不可逆,不能用于需要还原明文的场景
  • 用 CRC 校验安全更新包:攻击者重新计算校验值即可让篡改包通过,固件校验应使用签名

数据来源与参考

  • ITU-T V.42(CRC-32 定义)
  • FIPS 180-4(SHA 系列)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌