11-19 hashlib模块
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
sha 算法 随着算法复制程度成都的增加,摘要的时间和成本空间都会增加 摘要算法的作用
1、密码的密文存储
2、文件的一致性验证
在下载的时候,检查我们下载的文件和远程服务器上的文件是否一致
两台机器上的两个文件,你想检查这两个文件是否相等
摘要算法:包括一堆算法
import hashlib #提供摘要算法的模块
md5 = hashlib.md5() #使用了md5算法
md5 = hashlib.sha1() #使用了sha1算法
md5.update(b'alex3714') #aee949757a2e698417463d47acac93df
print(md5.hexdigest()) 说明:
不管算法多么不同,摘要的功能始终不变
对于相同的字符串,使用同一个算法进行摘要,得到的值总是不变的
对于相同的字符串,使用不同的算法进行摘要,得到的值应该不同
不管使用什么算法,hashlib的方式永远不变
做摘要计算,实质就是把字节类型的内容进行摘要处理
MD5方式:正常md5、加盐的、动态加盐的
例子:
#用户登录-----(用\n作为分隔符,容易出错,因为下面是以line来遍历的)
import hashlib
usename = input('输入名字:')
password = input('输入密码:')
md5 = hashlib.md5()
#生成加密串,其中 password 是要加密的字符串
md5.update(b'password')
#获取加密串
get_psd = md5.hexdigest()
with open('userinfo','w') as f:
f.write(usename+'|')
f.write(get_psd)
f.close() #用户登录
import hashlib
usename = input('输入名字:')
password = input('输入密码:')
md5 = hashlib.md5()
#生成加密串,其中 password 是要加密的字符串
md5.update(b'password')
#获取加密串
getnew_psd = md5.hexdigest()
print(getnew_psd)
with open('userinfo') as f:
for line in f:
user,psd = line.split('|')
if usename ==user and getnew_psd == psd:
print('登录成功!')
else:
print('登录失败!')
exit()
f.close()
摘要算法中加盐
import hashlib #提供摘要算法的模块
md5 = hashlib.md5(bytes('salt',encoding='utf-8')) #使用了md5算法
md5.update(b'alex3714') #aee949757a2e698417463d47acac93df
print(md5.hexdigest()) #29520817dd17b99ea7af32890f7698fb(和不加盐的结果不一样)
动态加盐
使用用户的一部分或者直接使用使用整个用户名作为盐
import hashlib #提供摘要算法的模块
md5 = hashlib.md5(bytes('盐',encoding='utf-8')+b'123') #使用了md5算法
md5.update(b'alex3714')
print(md5.hexdigest()) #28236e01d84bd2ecc7642c4e9b811845(结果不一样)
import hashlib
md5 = hashlib.md5()
md5.update('alex')
md5.update('3714')
print(md5.hexdigest)#得到的结果与不分开的一致,所以以后可以对字符串或者文件分开update
11-19 hashlib模块的更多相关文章
- python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块
time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...
- 19 python初学(os 模块,sys 模块,hashlib 模块)
os 模块: # _author: lily # _date: 2019/1/13 import os print(os.getcwd()) # 得到当前的工作目录 # print(os.chdir( ...
- Python基础-列表推导式、匿名函数、os/sys/time/datetime/pymysql/xlwt/hashlib模块
列表推导式 [表达式 for 变量 in range(n) if 条件] 等效于 for 变量 in in range(n): if 条件: 表达式 优点:书写方便,缺点:不易读 注意:用的是方括号 ...
- pyhton3 hashlib模块
hashlib模块提供一下常量属性 hashlib.algorithms_guaranteed 获取保证在所有平台上此模块支持的哈希算法名称的集合 hashlib.algorithms_availab ...
- 024--python re、logging、configparser、hashlib模块
一.re模块 re模块又称正则表达式是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...
- python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识
目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...
- 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块
目录 1. 包 2. time模块 1. 优先掌握 2. 了解 3. datetime模块 1. 优先掌握 4. random模块 1. 优先掌握 2. 了解 5. hashlib模块 ...
- 标准库hashlib模块
hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 算法(都是基于hash的算法, ...
- python标准模块(time、datetime及hashlib模块)
一.time,datetime模块 时间相关的操作 import time time.sleep(5) # ==> 停顿多少秒 print(time.time()) # ==> 返回时间戳 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
随机推荐
- 「区间DP」「洛谷PP3146 」[USACO16OPEN]248 G
[USACO16OPEN]248 G 题目: 题目描述 Bessie likes downloading games to play on her cell phone, even though sh ...
- Docker镜像-列出镜像
列出镜像 镜像体积 虚悬镜像 中间层镜像 列出部分镜像 要想列出已经下载下来的镜像,可以使用docker images 或者 docker image ls 命令. $ docker image ls ...
- DNS域名解析服务的介绍
1.1什么是域名? 域名(英语:Domain Name),简称域名.网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理 ...
- DLL隐式链接
动态链接库有2种连接方式,一种是通过库直接加入(又叫隐式加载或载入时加载),一种是在运行时加入.后者很好理解,比如LoadLibrary(),GetProcAddress()获取想要引入的函数,使用完 ...
- Django---drf入门
目录 1 web开发模式 2 api接口 3 postman的使用 4 Restful规范(重点) 5 drf的安装和简单使用 3 cbv源码 4 APIView源码分析 1 web开发模式 #前后端 ...
- element-ui(vue版)使用switch时change回调函数中的形参传值问题
需求说明 有多个switch组件 需要知道switch的状态 表格中当前行(scope.row)的数据 问题描述 官方文档中对switch中change的描述: 目前能得到switch的状态值,但是无 ...
- unity第一人称如何设置
关系图 红色菱形:脚本 白色矩形:组件 移动代码 //移动代码 public CharacterController controller;//角色控制器 public float speed = 1 ...
- CentOS 7 内核RPM方式升级
RPM包下载地址: https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 选择lt版本(长期支持) #下载内核RPM包,这里是kernel-lt-4.4.- ...
- 事件的event对象基本解释
事件流: 描述的是在页面中接受事件的顺序主要分为两种: 事件冒泡.事件捕获 事件event对象:1. type 获取事件类型2. target获取事件目标3. stopPropagation() 阻止 ...
- 金三银四,资深HR给面试者的十大建议
一.提前复习好你的专业知识 专业知识是最为重要的一点,拥有了坚实的专业基础,你才能迈向成功的彼岸. 因此,面试之前,一定一定要复习好专业知识.对自己学过的知识,要做一个概括,放在脑海中.茶余饭后,复习 ...