JamesRuan
2015-10-22 22:46:05 +08:00
CRC32 不是校验文件完整性的。
md5 、 sha1 都是 digest algorithm ,用于用很小的代价比较两段数据是否“不同”。 digest 不同的,一定不同, digest 相同的,有非常小的概率不同。
而 crc 是 error-ditecting code ,用于发现由于随机错误导致的数据失真。 CRC 不为 0 的,说明一定有错误发生,而 CRC 为 0 的,则不一定是没有数据错误。( Typically an n-bit CRC applied to a data block of arbitrary length will detect any single error burst not longer than n bits and will detect a fraction 1 − 2^{-n} of all longer error bursts )
两者有相似性,都是把一个更大的空间 map 到一个很小的空间,不同点是,要故意构造相同的 md5 digest 和 sha1 digest 是个难题,但构造 CRC 相对就很容易了;前者有很强的防故意构造能力(虽然 md5 已经被王小云攻破,可以比设计地更容易构造相同的 digest ),而后者只具有有限的抗随机错误的能力。