hashlib模块

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('登录失败')
posted @   Mr沈  阅读(168)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示