hashlib模块

摘要算法 : 只能加密不能解密

加密算法 : 用方法加密 加密后的字符串可以解密

【一】什么是摘要算法

Python的hashlib提供了常见的摘要算法

如MD5

SHA1等等。

摘要算法又称哈希算法、散列算法。

它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest

目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数

计算f(data)很容易,但通过digest反推data却非常困难。

而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

【二】使用

import hashlib
import json

def one():
# 给原始数据
data = 'my name is dream'
# 转成二进制数据
data = data.encode('utf-8')
# 创建一个md5对象
md5 = hashlib.md5()
# 把原始数据给 md5 对象加密
md5.update(data)
# 返回加密后的结果
# 一种是加密后的 16 进制的 32 长度的字符串
print(md5.hexdigest()) # c4ca4238a0b923820dcc509a6f75849b
# 一种是二进制数据
print(md5.digest())

# 把常见的这种字符 用md5加密 ---> 扔到数据库里面
# 数据库中查 又返回
return md5.hexdigest()

import random

def get_verify_code(n):
code = ''
for i in range(n):
random_int = str(random.randint(0, 9)) # 0-9之间的整数
random_upper = chr(random.randint(65, 90)) # A-Z之间的字母
random_lower = chr(random.randint(97, 122)) # a-z之间的字母
temp = random.choice([random_int, random_upper, random_lower])
code += temp
return code

def two():
code = get_verify_code(6)
# 给原始数据
data = 'my name is dream'
# data = data + code
# data = code + data
# 转成二进制数据
data = data.encode('utf-8')
code = code.encode('utf-8')
# 创建一个md5对象
md5 = hashlib.md5()
# 把原始数据给 md5 对象加密
md5.update(code)
md5.update(data)
# 返回加密后的结果
# 一种是加密后的 16 进制的 32 长度的字符串
print(md5.hexdigest()) # c4ca4238a0b923820dcc509a6f75849b
# 一种是二进制数据
print(md5.digest())

# 把常见的这种字符 用md5加密 ---> 扔到数据库里面
# 数据库中查 又返回

return md5.hexdigest()

'''
one = one()
two = two()
print(one) # a9824cf2cad8240003dd8071a4b315d3
print(two)

78e3b0d87878746c81a6aee148139459

c0cd81c3993a68867f1ebeeb7e0b2535

df200c13893926f399290212fbf8dc26

b44c1a5212b71ee2bde885dfd8e0484e

'''

def save_data(data):
with open('user_data.json', 'w') as fp:
json.dump(obj=data, fp=fp)

def read_data():
with open('user_data.json', 'r') as fp:
data = json.load(fp=fp)

return data

def get_username_password():
username = input("username :>>>> ").strip()
password = input("password :>>>> ").strip()
return username, password

def encrypt_password(password, salt):
data = password + salt
data = data.encode()
md5 = hashlib.md5()
md5.update(data)
return md5.hexdigest()

def register():
username, password = get_username_password()
print(password)
salt = get_verify_code(6)
password = encrypt_password(password, salt)
save_data({'username': username, "password": password,'salt':salt})

def login():
username, password = get_username_password()
user_data_dict = read_data()
print(password)
salt = user_data_dict['salt']
password = encrypt_password(password, salt)
if username == user_data_dict['username'] and password == user_data_dict['password']:
print(f"登录成功!")
else:
print("登录失败")
register()
login()

posted @   zenopan  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示