除了性能和安全性方面的考虑,假设哈希函数具有完美的雪崩效应,我应该使用哪种方法来检查数据的和块: CRC32还是散列被截断为N个字节?也就是说,哪一种错误的出错概率较小?具体地说:
数据块要通过网络传输,并反复存储在磁盘上。块的大小可以是1KB到1GB。
据我所知,CRC32可以以100%的可靠性检测多达32位翻转,但在此之后,它的可靠性接近1-2^(-32),对于某些模式来说,情况要糟糕得多。一个完美的4字节哈希可靠性总是1-2^(-32),所以去图.
8字节哈希应该有一个更好的整体可靠性(2^(-64)有机会错过一个错误),那么它应该比CRC32更好吗?那CRC64呢?
我想答案取决于在这类操作中可能会出现的错误类型。我们可能会看到稀疏的1位翻转或大规模的块状腐败吗?另外,考虑到大多数存储和网络硬件都实现了某种类型的CRC,不应该已经处理掉偶然的位翻转了吗?
发布于 2013-01-28 05:35:32
撇开“性能”问题不谈;您可能需要考虑使用SHA-2函数之一(例如SHA-256)。
https://stackoverflow.com/questions/14536130
复制相似问题