效率不同:
直接看代码
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高, 但是效率低, 所以一般适用于数字证书
等对效率要求没那么高的场景