【发布时间】:2013-01-10 06:17:51
【问题描述】:
除了性能和安全考虑之外,假设哈希函数具有完美的雪崩效应,我应该使用它来校验数据块:CRC32 还是被截断为 N 字节的哈希? IE。哪个将有更小的概率错过错误?具体来说:
- CRC32 与 4 字节哈希
- CRC32 与 8 字节哈希
- CRC64 与 8 字节哈希
数据块将通过网络传输并重复存储在磁盘上。块的大小可以是 1KB 到 1GB。
据我了解,CRC32 可以检测多达 32 位翻转,并且具有 100% 的可靠性,但之后其可靠性接近 1-2^(-32),并且对于某些模式来说更糟。完美的 4 字节散列可靠性始终是 1-2^(-32),所以去算一下。
8 字节哈希应该具有更好的整体可靠性(2^(-64) 有可能错过错误),那么它是否应该优于 CRC32?那么CRC64呢?
我想答案取决于此类操作中可能出现的错误类型。我们是否可能会看到稀疏的 1 位翻转或大量块损坏?此外,鉴于大多数存储和网络硬件都实现了某种 CRC,不应该已经处理意外的位翻转吗?
【问题讨论】:
-
我想我对“一般哈希”的含义感到困惑。
-
好的,删除了“general”,我的错。
标签: hash checksum crc32 error-detection