python学习-day12 hashlib

视频链接: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')
            break
    else:
        print('no')

msg='''
1.注册
2.登录
'''
func_dic={
    '1':register,
    '2':login
}
choose=input(msg)
if choose in func_dic:
    func_dic[choose]()
else:
    print("输入错误")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值