hashlib:封装了一些用于加密的类
常用加密算法:md5:文件校验,比如已知道服务器上的安装包的sha值,在本地检测下载好的文件的sha值是否一致
sha系列:金融类,安全类,对安全性要求较高的企业。随着sha系列数字越高,加密越复杂,越不容易破解,但是耗时越长
特点:1.把一个大的数据,切分成不同块,分别对不同的块进行加密,
再汇总的结果和直接对整体数据加密的结果是一致的
2.单向加密,不可逆
3.原始数据的一点小的变化,将导致结果的非常大的差异,即'雪崩效应'
加密算法的基本步骤:
1.获取一个加密对象
2.使用加密对象的update方法,进行加密,update方法可以调用多次
3.通常通过hexdigest方法获取加密结果
验证:两个数据两次加密的结果对比,
如果结果相同,说明数据相同
MD5算法代码展示:
import hashlib # 1.获取一个加密对象(可以直接在参数中添加数据对象而不需要使用update,结果是一样的) m = hashlib.md5() # 2.使用加密对象的update,对转换成bytes的数据类型进行加密 m.update(b'abc') # 3.通过hexdigest获取加密结果 res = m.hexdigest() print(res, len(res))
sha系列算法代码展示:
s = hashlib.sha224() s.update(b'abc') print(s.hexdigest(), len(s.hexdigest())) # 不同的加密算法,实际上是加密结果长度的不同
必要时我们需要使加密过程更复杂化,这里就涉及到了一个概念‘加盐’
import hashlib s = 'Python' m = hashlib.md5('sault'.encode('utf-8')) # 这里的盐我用sault指代,可以任意指定 # 原数据拆分成不同的块,分块加密,最后的加密结果是一致的 m.update('Py'.encode('utf-8')) m.update('thon'.encode('utf-8')) print(m.hexdigest())
s1 = 'happiness'
m = hashlib.md5('sault'[::2].encode('utf-8')) # 这里我对某个数据类型进行切片,使'盐'更动态化
m.update(s1.encode('utf-8'))
print(m.hexdigest())