当前位置: 代码迷 >> 综合 >> python学习-day12 hashlib
  详细解决方案

python学习-day12 hashlib

热度:21   发布时间:2024-01-31 07:31:59.0

视频链接:https://www.bilibili.com/video/BV1SE411N7Hi?p=81

课件内容:https://guobaoyuan.gitee.io/new_book/Python/17-4%20hashlib.html

以下内容仅供个人学习使用,侵删

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
'''
hashlib:加密
md5,sha1,sha256,sha512等
越长,速度越慢加密:明文-》字节-》密文
密文是不可逆的,不能破解
明文如果是一致的,密文也是一致的用户注册:
用户名-》字节-》密文-》存储登录:
输入-》字节-》密文-》校验文件一致性校验在老师的blog中有详细介绍
'''
#注册
user='alex'
pwd='alex123'
import hashlib
s=hashlib.sha1()#初始化一个加密模板
#s.hashlib.md5()
s.update(pwd.encode('utf-8'))#添加要加密的字节
m=s.hexdigest()#加密
print('m:',m)
f=open('userinfo','a',encoding='utf-8')
f.write(f"{user}:{m}\n")
'''
多次update结果一样
s.update('alex'.encode('utf-8'))
m=s.hexdigest()
print(m)
与
s.update('a'.encode('utf-8'))
s.update('l'.encode('utf-8'))
s.update('e'.encode('utf-8'))
s.update('x'.encode('utf-8'))
m=s.hexdigest()
print(m)
效果一样
'''#登录
user='alex'
pwd='alex123'
import hashlib
s=hashlib.sha1()#初始化一个加密模板
#s.hashlib.md5()
s.update(pwd.encode('utf-8'))#添加要加密的字节
m=s.hexdigest()#加密
print('m:',m)
f=open('userinfo','r',encoding='utf-8')
for i in f:file_user,file_pwd=i.strip().split(":")if user==file_user and file_pwd==m:print('ok')else:print('no')#撞库
import hashlib
s=hashlib.sha1()#初始化一个加密模板
#s.hashlib.md5()
s.update(pwd.encode('utf-8'))#添加要加密的字节
m=s.hexdigest()#加密#{'8c710486ceb03f08de3ebdae34ead9f249a2f699':'alex123'}维护一个很大的字典#固定加盐
import hashlib
s=hashlib.sha1()#初始化一个加密模板
s1=hashlib.sha1('666'.encode('utf-8'))#加盐
#s.hashlib.md5()
s.update(pwd.encode('utf-8'))#添加要加密的字节
s1.update(pwd.encode('utf-8'))
m=s.hexdigest()#加密
m1=s1.hexdigest()
print("加盐前:",m)
print("加盐前后:",m1)
# 加盐前  : 8c710486ceb03f08de3ebdae34ead9f249a2f699
# 加盐前后: 29d5cf7af100345bdc173e030aa82e262b73e497
#增加撞库的难度#动态加盐
#注册
def register():user=input("user:")pws=input("pwd:")s=hashlib.md5(user.encode('utf-8'))s.update(pwd.encode('utf-8'))m=s.hexdigest()f=open('userinfo',"a",encoding='utf-8')f.write(f"{user}:{m}\n")
#登录
def login():user=input("user:")pws=input("pwd:")s=hashlib.md5(user.encode('utf-8'))s.update(pwd.encode('utf-8'))m=s.hexdigest()f=open('userinfo',"r",encoding='utf-8')for i in f:file_user,file_pwd=i.strip().split(":")if file_user==user and file_pwd==m:print('ok')breakelse:print('no')msg='''
1.注册
2.登录
'''
func_dic={'1':register,'2':login
}
choose=input(msg)
if choose in func_dic:func_dic[choose]()
else:print("输入错误")