23 常用模块 hashlib

hashlib,是提供摘要算法的模块,它是一个集合。MD5,SHA1,SHAKE算法等。
摘要算法:用于密码的密文存储、文件的一致性验证。(a、检查下载的文件和远程服务器上的文件是否一致。b、 两台机器上的两个文件,检查这两个文件是否相等)
摘要算法的原理:对于同一个字符串,进行摘要,使用同一个算法得到的值始终是不变的。使用不同的算法对同一个字符串进行摘要算法,得到的值应该是不同的。不管是用什么摘要算法,hashlib的使用方式永远不变。

import hashlib
md5 = hashlib.md5()
md5.update(b'123456')
print(md5.hexdigest())	#hexdigest  hex是16进制,digest是摘要

输出:
在这里插入图片描述
SHA算法会随着算法复杂程度的增加,摘要的时间成本与空间成本会越来越大。

用户登录

import hashlib
usr = input('username :')
pwd = input('password : ')
with open('userinfo') as f:
    for line in f:
        user,passwd,role = line.split('|')
        md5 = hashlib.md5()
        md5.update(bytes(pwd,encoding='utf-8'))
        md5_pwd = md5.hexdigest()
        if usr == user and md5_pwd == passwd:
            print('登录成功')

但是用排列组合,将所有的组合形式都列出来,放到一个库中,这样可以通过撞库的方式,来实现解密,通过加盐的方式,我们可以避免这种情况的出现

加盐

静态加盐

import hashlib   # 提供摘要算法的模块
md5 = hashlib.md5(bytes('盐',encoding='utf-8'))		#‘盐’可以是任何的字符
# md5 = hashlib.md5()
md5.update(b'123456')
print(md5.hexdigest())

动态加盐

import hashlib
md5 = hashlib.md5(bytes('盐',encoding='utf-8')+b'')  #可以在最后的b''中加入随机的内容,比如用户名的一部分。
# md5 = hashlib.md5()
md5.update(b'123456')
print(md5.hexdigest())

猜你喜欢

转载自blog.csdn.net/weixin_43265998/article/details/89607418