hashlib模块使用详情
一:hashlib简介
1、什么叫hash:hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值
2、hash值的特点是(hash值/产品有三大特性:):
2.1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
2.2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码(只能有内容返回hash值)
2.3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的(如从网上下载文件要进行hash校验,保证网络传输没有丢包)
基于2.1和2.3可以做文件下载一致性的校验
基于2.1和2.2可以对用户密码进行加密
hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update()
为工厂运送原材料),经过加工返回的产品就是hash值
二:将指定的 “字符串” 进行加密。使用hashlib的分步解析
1)在进行md5哈希运算前,需要对数据进行编码,否则报错
import hashlib
obj = hashlib.md5() #构造一个hashlib的对象
obj.update("小马过河") #update对指定字符串进行加密
print(obj)
--------------结果:
obj.update("小马过河")
TypeError: Unicode-objects must be encoded before hashing
2)obj是hash对象
import hashlib
obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
print(obj,type(obj))
-------------------结果:
<md5 HASH object @ 0x001C5590> <class '_hashlib.HASH'>
3)
import hashlib
obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
result=obj.hexdigest()
print(result)
--------------结果:
24f67b0f6d02adc8867d612e0e0fc40a
4)给加密增添难度
import hashlib
obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8")) #添加一些内容,提高加密复杂度。此处的字符串也要先编码,
obj.update("小马过河".encode('utf-8'))
result = obj.hexdigest()
print(result)
-------------------结果:
b11740508f28e04837f2c0e3a58cf990
5)用hashlib做成加密函数(添加基础的字符了的)
import hashlib
def get_md5(data): #传参为需要加密的字符串
obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
obj.update(data.encode('utf-8'))
result = obj.hexdigest()
return result
val = get_md5('')
print(val)
--------------结果:
35093270b6352fa9721370b781f7b4d7
三:应用场景案例:用户账号密码登录,对明文密码进行加密
import hashlib
USER_LIST = []
def get_md5(data):
obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
obj.update(data.encode('utf-8'))
result = obj.hexdigest()
return result
def register():
print('**************用户注册**************')
while True:
user = input('请输入用户名:')
if user == 'N':
return
pwd = input('请输入密码:')
temp = {'username':user,'password':get_md5(pwd)}
USER_LIST.append(temp)
def login():
print('**************用户登陆**************')
user = input('请输入用户名:')
pwd = input('请输入密码:') for item in USER_LIST:
if item['username'] == user and item['password'] == get_md5(pwd):
return True
register()
result = login()
if result:
print('登陆成功')
else:
print('登陆失败')
------------------------结果:
**************用户注册**************
请输入用户名:小马过河
请输入密码:
请输入用户名:N
**************用户登陆**************
请输入用户名:小马过河
请输入密码:
登陆成功
#用户登录场景分析:实现用户注册,然后进行用户登录的代码分析。
#代码分析:
1、用户登录需要使用密码,密码一定要加密,保证用户的信息安全。
1)加密可以使用hashlib模块进行加密。
2)加密可以写成加密函数
3)提高密码解密的复杂性,代码中多加字符串。(加密算法虽然依然非常厉害,但是也存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。)
2、用户注册写成用户注册的函数,用户登录写成用户登录的函数。
3、先执行用户注册的函数,再执行用户登录的函数
4、注册与登录需要交互,用到input函数接收用户输入
5、如果用户注册和用户登录用到死循环,那么就要判断用什么来终止循环(比如这里是输入N)
6、用户注册提交的密码加密的密文写入数据库。、用户注册提交的密码加密的密文写入数据库。
7、用户登录输入的密码,使用相同加密函数加密后与数据库密文比对,相等就登录,否则就失败
8、登录的本质是判断从用户接收的加密后密文和注册时存入数据库的密文对比,用户名密文对比成功,则继续往下执行登录后的操作。
9、用户输入密码要防止旁人看到,可以使用getpass模块
10、与密码相关的很重要,一定要加密。包括自己拥有的影响大的重要数据也要加密,防止黑客入侵获取而泄密。
四:校验文件的一致性(如何保证下载的文件过程中不丢包,保证下载数据的完整性)
五:破解用户注册的密码
六、hmac模块的加密方式,与hashlib类似
参考链接:
https://www.cnblogs.com/sui776265233/p/9224754.html 男孩
https://www.cnblogs.com/breezey/p/6664733.html
查看链接:
https://blog.csdn.net/secret5/article/details/70150486
hashlib模块使用详情的更多相关文章
- python标准模块(time、datetime及hashlib模块)
一.time,datetime模块 时间相关的操作 import time time.sleep(5) # ==> 停顿多少秒 print(time.time()) # ==> 返回时间戳 ...
- Python hashlib模块 (主要记录md5加密)
python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...
- Python学习笔记——基础篇【第六周】——hashlib模块
常用模块之hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import ...
- Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)
本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...
- 小白的Python之路 day5 hashlib模块
hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ...
- Python模块之hashlib模块、logging模块
一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...
- python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块
一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- 19 python初学(os 模块,sys 模块,hashlib 模块)
os 模块: # _author: lily # _date: 2019/1/13 import os print(os.getcwd()) # 得到当前的工作目录 # print(os.chdir( ...
随机推荐
- Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码
1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...
- Oracle 存储结构一
了解块中表行数据的存储 Oracle数据存储模型 逻辑结构在左,物理结构在右 有一个关系使用虚线绘制,表示段与数据文件的多对多关系.之所以使用虚线表示关系,是因为这种多对多关系不应存在. 表空间实体消 ...
- vue 复习(2)v-bind的应用 v-bind:classv-binf:style
dasdclass与style绑定v-bind 1. 绑定HTML Class 对象语法 有些时候我们想动态的切换class的类名.在原生的js或jq中我们就要通过事件来动态的改变class类名,但在 ...
- #leetcode刷题之路19-删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1-& ...
- 大数据IDEA调试flink程序
Flink在IDEA中开发是一件比较困难的事情,网上没有参考资料,就算就业说的太过笼统,不知道是会了不说还是不会瞎说,为了解决flink这个问题,本人特别做了一遍开发的简单说明.主要考虑两个问题,1. ...
- Hive中导入Amazon S3中的分区表数据的操作
Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...
- python 数据类型、进制转换
数据类型 存储单位 最小单位是bit,表示二进制的0或1,一般写作b 最小的存储单位是字节,用byte表示,1B = 8b 1024B = 1KB 1024KB = 1MB 1024MB = 1GB ...
- springboot 使用@ConfigurationProperties注入配置属性
导入依赖,让springboot支持@ConfigurationProperties 注解 <!-- 支持 @ConfigurationProperties 注解 --> <depe ...
- IDL返回众数(数组中出现次数最多的值)
对于整型数组,可以直接利用histogram函数可以实现,示例如下: IDL>array = [1, 1, 2 , 4, 1, 3, 3, 2, 4, 5, 3, 2, 2, 1, 2, 6, ...
- Could not connect to '192.168.80.145' (port 22): Connection failed的解决办法(远程连不上xshell)
问题状况表现1 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置!!!. 问题状况表现2 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置. 解决办法 网上的那些解决方案,我都试过,比如. ...