首页 > 技术文章 > hashlib模块

Mr-shen 2019-11-18 00:23 原文

hashlib模块

加密模块,内置很多算法,最常用的是MD5

摘要算法:

  • 摘要算法是从某个内容中获取的加密字符串
  • 摘要一样,内容一定一样:保证唯一性
  • 密文密码就是一个摘要
import hashlib
# 获取一个hashlibMD5对象
res = hashlib.md5()
import hashlib
# 获取一个hashlibMD5对象,并进行赋值,若不赋值后续直接引用,默认加密的是空字符串
res = hashlib.md5()
#将字符串转换从bytes类型 update一定要传入bytes类型
l1 = '1234'
res.update(l1.encode('utf-8'))
# 将字符串进行加密
jm_md = res.hexdigest()
print(jm_md)
# 获取一个hashlibMD5对象,若不赋值后续直接引用,后续开新的内存空间默认加密的是空字符串
hashlib.md5().update('123456'.encode('utf-8'))
hashlib.md5().hexdigest()  # ---> 后续开新的内存空间,默认的加密空字符串

以上操作可能会被撞库破解真实密码

防止撞库文件:加盐(在原传入的数据后追加固定的一串数据)

import hashlib
# 获取一个hashlibMD5对象
res = hashlib.md5()
# 在对象中传入字符 update一定要传入bytes类型
l1 = '1234'
res.update(l1.encode('utf-8'))
# 创造盐
sal = 'Mr沈'
# 加盐
res.update(sal.encode('utf-8'))
# 加密
jm2_md = res.hexdigest()
print(jm2_md)
# 模拟用户登录操作
# 加密密码
def md5_obj(n):
    md5 = hashlib.md5()
    str1 = n
    md5.update(str1.encode('utf8'))
    sal = '沈勇牛批'
    md5.update(sal.encode('utf8'))
    res = md5.hexdigest()
    return res

# 拼接用户名和密码
res = md5_obj('1234')
str2 = f'sheny:{res}'
# 写入文件中
with open('user.txt', 'w', encoding='utf8') as f:
    f.write(str2)
# 读取出用户名和密码
with open('user.txt', 'r', encoding='utf8') as f:
    user_read = f.read()
# 解压用户名和密码
name, pwd = user_read.split(":")
# 登录判断
while True:
    username = input('输入用户名')
    password = input('请输入密码')
    if username == name and md5_obj(password) == pwd:
        print('登录成功')
        break
    else:
        print('登录失败')

推荐阅读