首页 > 其他分享 >hashlib模块

hashlib模块

时间:2024-04-22 09:35:05浏览次数:27  
标签:username hashlib code random 模块 password data md5

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

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

【一】什么是摘要算法

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()

标签:username,hashlib,code,random,模块,password,data,md5
From: https://www.cnblogs.com/zenopan101861/p/18149996

相关文章

  • logging模块
    logging模块记录log记录日志的模块importloggingimportlogging.configimportosimportsystry:#想要给日志上色就安装这个模块#pipinstallcoloredlogs:::>>>给日志上个色importcoloredlogsexceptExceptionase:ifstr(e)=="Nomodulenamed'coloredlo......
  • json模块
    【一】什么是序列化将Python中的字典、列表、元组...转换成字符串类型如果使用str强制转换数据类型,造成的后果就是转换后的字符串无法转回Python对象【二】什么是反序列化将字符串类型的数据转换成Python对象(列表、字典、元组...)能将python对象转为字符串-->字符串......
  • C#的基于.net framework的Dll模块编程(一) - 编程手把手系列文章
    从此博文开始分几篇介绍C#的开发。这次讲讲C#的.netframework的Dll文件类库模块的编程方法。对于Windows来说,要运行应用程序要基于Dll类库和Exe执行文件。对于笔者来说,模块化的编程方式,就是将一些函数等封装到Dll类库文件中,将这些类库集中和分模块进行编写和管理。就是......
  • time模块,datetime模块,os模块,random模块,logging模块,hashlib模块
    Ⅰtime模块【1】表示时间的三种方式#【1】时间戳表示时间:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数#我们当时给函数计时两次时间戳相减得到了消耗的总时间#【2】元组(struct_time)(年,月,日,时,分,秒,......
  • 程序模块化设计结构化开发优势
    程序模块化设计结构化开发1.模块化开发,符合高内聚,低耦合的设计。在具体的程序修改的时候,程序代码不过于分散。有利于维护。同时也有利于对外提供接口能力。2.模块化更多的规模或能力,可以理解为微服务。独立部署独立运行。不影响整理的系统功能。3.举例:对外部入参做转换处理,可以将......
  • vue中ts引入组件,无法找到模块xxx的声明文件。xxx隐式拥有 "any" 类型。
    原因说明简单来说就是ts不认识.vue这个类型,需要定义声明。我刚学ts不是很懂为什么vite官方内写了那么多类型声明就是不写.vue。解决方法在项目根目录下找到env.d.ts文件,这个文件定义类型声明,简单地说就是让ts认识各种类型,尤其是文件。那么解决方法显而易见,我们自定义vue的......
  • Python库、包、模块
    一、什么是库、包、模块无论是库、包、模块,其核心都在于封装了一系列的功能。1、库library,这个概念并非Python里的概念,是从C语言过来的。库这个概念其实就是一堆代码一起完成一个或多个任务。非常类似函数,但是是以文件组织在一起。2、模块module,这个概念就是Python里的概念,一个......
  • 菜品分类模块删除接口+今天的图片不回显问题没有解决,明天再说。这篇随便写写吧,呕。+修
    点击删除按钮,删除菜品,也可以在左侧进行批量删除,故制定批量删除接口。删除规则如下 其中被套餐关联的菜品不能删除,因为删除这些菜品直接影响到套餐删除菜品后,关联的口味也要删除,所以这个删除蛮复杂的,并不是那种单表直接删的简单操作  请求参数和返回数据: 涉及到的表有......
  • 数据分析中缺失值可视化(missingno模块)
    missingno模块讲解missingno安装condainstallmissingno或者pipinstallmissingno。missingno常用API讲解importmissingnoasmsno密度图:matrixmsno.matrix(df,labels=True)生成的密度图中的白线代表缺失值,右下角的数字表示不存在缺失值的列,右侧的数字表示数据......
  • 模块介绍,包,json模块
    【一】模块1.什么是模块模块就是一系列功能的结合体,可以直接使用2.为什么要模块极大地提升开发效率3.模块的三种来源【1】内置模块无需下载,解释器自带,直接导入使用即可【2】自定义模块自己写的代码,封装成模块,自己用或者是发布到网上供别人使用【3】第三方模块别人写的......