效率不同:
直接看代码
import zlib
import hashlib
import timewith open(r'D:\data.', 'rb') as f:x = f.read()s = time.time()
for i in range(100000):d = zlib.crc32(x)
print(time.time() - s)s = time.time()
for i in range(100000):m = hashlib.md5()m.update(x)d = m.hexdigest()
print(time.time() - s)s = time.time()
for i in range(100000):sha1 = hashlib.sha256()sha1.update(x)d = sha1.hexdigest()
print(time.time() - s)
执行结果
 
 原因:
 crc的运算结果是32位
 md5的运算结果是128位
 sha有很多种 sha1是160位
 也可以从算法里判断, 但是这里就不深入讨论了
适用场景不同
- crc: 是多项式除法, 线性结构, 如果连续出错, 出错次数达到一定次数时,几乎可以肯定出现一次碰撞(数据不对, 但是结果一样), 所以一般适用于- 通信数据校验, 因为简单时间快, 准确度没那么高要求
- md5: 可靠性更高, 一般适用于- 本地文件校验,- 网络传输大文件的校验等, 因为可靠性更高, 并且效率要比- sha系列算法快
- sha: 可靠性比md5高, 但是效率低, 所以一般适用于- 数字证书等对效率要求没那么高的场景