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模块的更多相关文章

  1. python基础语法11 内置模块time,datatime,random,os,sys,hashlib模块

    time模块 在python的三种时间表现形式: 1.时间戳: 给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. 2.格式化时间(Format Strin ...

  2. 19 python初学(os 模块,sys 模块,hashlib 模块)

    os 模块: # _author: lily # _date: 2019/1/13 import os print(os.getcwd()) # 得到当前的工作目录 # print(os.chdir( ...

  3. Python基础-列表推导式、匿名函数、os/sys/time/datetime/pymysql/xlwt/hashlib模块

    列表推导式 [表达式 for 变量 in range(n) if 条件]  等效于 for 变量 in in range(n): if 条件: 表达式 优点:书写方便,缺点:不易读 注意:用的是方括号 ...

  4. pyhton3 hashlib模块

    hashlib模块提供一下常量属性 hashlib.algorithms_guaranteed 获取保证在所有平台上此模块支持的哈希算法名称的集合 hashlib.algorithms_availab ...

  5. 024--python re、logging、configparser、hashlib模块

    一.re模块 re模块又称正则表达式是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...

  6. python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识

    目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...

  7. 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块

    目录 1. 包 2. time模块   1. 优先掌握 2. 了解 3. datetime模块   1. 优先掌握 4. random模块   1. 优先掌握   2. 了解 5. hashlib模块 ...

  8. 标准库hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 算法(都是基于hash的算法, ...

  9. python标准模块(time、datetime及hashlib模块)

    一.time,datetime模块 时间相关的操作 import time time.sleep(5) # ==> 停顿多少秒 print(time.time()) # ==> 返回时间戳 ...

  10. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

随机推荐

  1. 一个很酷炫也挺实用的JS库leader-line

    简单粗暴,直入主题,看看效果再说. 是不是这效果挺棒?这样的效果在做系统时,可以有很多的应用,可以让枯燥的页面生动起来. 具体效果,大家可以上这个搜索网站Mag[i]上面看,切身体会一下. 这是一个开 ...

  2. css实现div多边框_box-shadow模拟多边框、outline描边实现

    在css3中我们知道可以使用box-shadow属性轻松的为元素添加阴影效果,并且可以设置多组效果,每组参数值用逗号隔开.如果把box-shadow特性的两个偏移量 h-shadow .v-shado ...

  3. Angular实现购物车全选

    直接上代码 <!DOCTYPE html> <html ng-app="myApp" > <head> <meta charset=&qu ...

  4. 线性dp打鼹鼠

    题目大意 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个 的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可 ...

  5. Django---进阶1

    目录 静态文件配置 request对象方法初识 pycharm链接数据库(MySQL) django链接数据库(MySQL) Django ORM 字段的增删改查 数据的增删改查 今日作业 静态文件配 ...

  6. 前端进阶笔记(一)---JS语言通识

    一.语言按照语法分类 1.非形式语言:中文 英文 2.形式语言:乔姆斯基谱系(四种文法 上下文包含文法) 0型 无限制文法 1型 上下文相关文法 2型 上下文无关文法 正则文法 二 产生式(BNF) ...

  7. ArrayList源码分析-jdk11 (18.9)

    目录 1.概述 2.源码分析 2.1参数 2.2 构造方法 2.2.1 无参构造方法 2.2.2 构造空的具有特定初始容量值方法 2.2.3构造一个包含指定集合元素的列表,按照集合的迭代器返回它们的顺 ...

  8. mysql解压缩版安装和卸载

    所有的cmd命令都是在管理员模式下输入 官方下载网址:https://dev.mysql.com/downloads/mysql/ 安装mysql mysqld install //安装mysql:卸 ...

  9. JVM 专题十六:StringTable

    1. String的基本特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承. String实现了Serializable接口:表示字符 ...

  10. 服务器创建tensorflow环境,nni自动调参记录

    一.anaconda安装记录 1.1 下载安装脚本:wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh 1.2 ...