hashlib 模块提供了常见的摘要算法,如MD5,SHA1
摘要算法(又称哈希算法、散列算法):
原理:它通过一个函数,把任意长度的数据转为一个长度固定的数据串(通常用16进制的字符串表示)
加密概念:单向的加密,反推理论上不可能。
算法:
一 、MD5:
最常见的摘要算法,特点:速度快,生成的结果是128位字节,通常用32位id 16进制字符串表示
例如:
a = b'good morning'
m5 = hashlib.md5()
m5.update(a)
print(m5.hexdigest()) # 进行16进制转化生成32位字符串
输出:2b849500e4585dab4196ec9a415edf8f
一般结合base64使用, 例如
a = '12345'
a = a.encode('utf-8')
a = base64.b64encode(a)
md5 = hashlib.md5()
m5.update(a)
print(m5.hexdigest())
如果数据量比较大, 可以分多次调用update,最后的结果是一样的
m6 = hashlib.md5()
m6.update(b'good ')
m6.update(b'morning')
print(m6.hexdigest())
输出是一样的加密结果:
2b849500e4585dab4196ec9a415edf8f
2b849500e4585dab4196ec9a415edf8f
二 、SHA1:重点:
调用SHA1与调用MD5完全一样,SHA1的结果是160bit字节,通常40位16进制字符串表示
a2 = b'good morning'
sh1 = hashlib.sha1()
sh1.update(a2)
print(sh1.hexdigest())
输出结果对比32位和40位:
2b849500e4585dab4196ec9a415edf8f
a8cbec7254dd9499e2f86d55098931a41db62d6e
三、 更安全的:
SHA256
SHA512
越安全的算法不仅越慢,摘要会越长
四、应用:
任何允许用户登录的网站都会存储用户登录的用户名和密码,那么密码一般存储的是原密码的摘要值。
如果明文存到数据库中,数据库泄露,信息就会暴露不安全。
前端传过来密码会在后端进行加密获得摘要值,与数据库存储的摘要值对比是否相等,来决定是否登录成功。
网友评论