Python入门 Python值hashlib详解

Python入门 Python值hashlib详解

编程玉子2021-02-19 17:05:19

阅读目录

  • 一、hashlib的基本概念
  • 二、如何产生hash值之三个阶段
  • 三、校验文件的一致性(如何保证下载的文件过程中不丢包,保证下载数据的完整性)
  • 四、对明文密码进行加密
  • 五、破解用户注册的密码
  • 六、hmac模块的加密方式,与hashlib类似

小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取

一、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值

二、如何产生hash值之三个阶段

import hashlib         #(hash库)import hashlib# # ######## 256 ######### # 1、造出hash工厂hash = hashlib.sha256('898oaFs09f'.encode('utf8'))     #同一种hash算法得到的长度是固定的# # 2、运送原材料hash.update('alvin'.encode('utf8'))                     #工厂传入的原材料都是bytes类型# # 3、产出hash值print(hash.hexdigest())  # e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7import hashlibm=hashlib.md5()                               #括号内也可以传值,类型也要求是bytes类型m.update('你好呀!'.encode('utf-8'))print(m.hexdigest())                          #9e49eb8e75b9a87424e388b862ea5f83# 与上述hash的结果一样import hashlibm=hashlib.md5('你'.encode('utf-8'))          #括号内也可以传值,类型也要求是bytes类型m.update('好呀!'.encode('utf-8'))print(m.hexdigest())  

三、校验文件的一致性(如何保证下载的文件过程中不丢包,保证下载数据的完整性)

# -----------文件一致校验----------------'''可以拷贝一个文件放在两个不同的盘中,然后通过判断两个文件的hash值是否相等,判断两个文件是否是同一个文件'''import hashlibm = hashlib.md5()with open(r'G:/logging模块配图.png','rb') as f: for line in f: m.update(line)print(m.hexdigest()) #47a6b079cc33a4f312786b46e61e0305import hashlibm = hashlib.md5()with open(r'H:/logging模块配图.png','rb') as f: for line in f: m.update(line)print(m.hexdigest())

四、对明文密码进行加密

# 应用:对明文密码进行加密(暴力破解-------用明文密码用一种算法算出一个hash值,与截取的hash值进行比对,比对成功说明明文密码一致,就可以破解用户的密码)'''如用户在某网站进行注册信息,这个时候防止信息被恶意拦截获取,可以对用户明文密码进行加密,存成hash值得形式,这样用户每次登陆虽然输的是明文密码,校验hash值即可'''password=input('>>>>>:').strip()import hashlibm=hashlib.md5()m.update(password.encode('utf-8'))print(m.hexdigest())             #00dcbdaede875d5e23f1f9f64c7849ef# 对密码进行加盐(暗号)----------进一步加强密码的安全性password=input('>>>>>:').strip()import hashlibm=hashlib.md5()m.update('一行白鹭上青天'.encode('utf-8'))         #对密码加盐m.update(password.encode('utf-8'))print(m.hexdigest())    

五、破解用户注册的密码

# 重点'''模拟撞库破解密码'''import hashlibpasswds=[ #可以通过random实现对passwds中的内容 'alex3714', 'alex1313', 'alex94139413', 'alex123456', '123456alex', 'a123lex', ]def make_passwd_dic(passwds): #通过明文密码列表,造出与之对应的hash值得字典 dic={} for passwd in passwds: m=hashlib.md5() #使用md5算法,造了一个工厂 m.update(passwd.encode('utf-8')) #给工厂运送原材料(即我们要加密的内容) dic[passwd]=m.hexdigest() #产出hash值(即最终的产品),将其加入到我们事先造好的空字典中,字典形式:{密码:hash值} return dicdef break_code(cryptograph,passwd_dic): #判断拦截的hash值是否与字典中事先造好的hash值相等,相等则说明成功进行破解 for k,v in passwd_dic.items(): if v == cryptograph: print('密码是===>\033[46m%s\033[0m' %k)cryptograph='aee949757a2e698417463d47acac93df' #我们拦截拿到的密码,经过加密的hash值break_code(cryptograph,make_passwd_dic(passwds)) #将要破解的密码hash值,和事先造好的hash的字典当做函数的实参传给对应的形参

六、hmac模块的加密方式,与hashlib类似

'''python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:'''import hmach = hmac.new('天王盖地虎'.encode('utf8'))          #hmac必须要加盐h.update('hello'.encode('utf8'))print(h.hexdigest())                 #1abaae8f65f68f2695a8545c5bc8e738#要想保证hmac最终结果一致,必须保证:#1:hmac.new括号内指定的初始key一样#2:无论update多少次,校验的内容累加到一起是一样的内容# 下面单重方式得到的结果是一样的import hmach1=hmac.new(b'tom')          #初始值必须保证一致,最终得到的结果就会不一样h1.update(b'hello')h1.update(b'world')print(h1.hexdigest())h2=hmac.new(b'tom')         #初始值必须保证一致,最终得到的结果就会不一样h2.update(b'helloworld')print(h2.hexdigest())h3=hmac.new(b'tomhelloworld')   #初始值不一样,所以与上面两种的结果不一样print(h3.hexdigest())'''0426ccec3b134e8c18fdcefee841ef250426ccec3b134e8c18fdcefee841ef25ff1214d895bbaf5f1847db4ebae8212e'''
收藏
举报
0 条评论
(0)

相关推荐

  • 【每周一坑】螺旋矩阵

    今天这题,看起来挺简单,实际写出来并不容易.在以前公司我曾把它做过招聘的笔试题,结果惨不忍睹,不得不拿掉. 输出如图的螺旋矩阵: 1   2   3   4 12  13  14   5 11  16 ...

  • python笔记44-HTTP对外接口sign签名

    前言 一般公司对外的接口都会用到sign签名,对不同的客户提供不同的apikey ,这样可以提高接口请求的安全性,避免被人抓包后乱请求. sign签名是一种很常见的方式 sign签名 签名参数sign ...

  • 什么叫给密码“加盐”?如何安全的为你的用户密码“加盐”?

    什么叫给密码"加盐"?如何安全的为你的用户密码"加盐"? 在面对这个网络世界的时候,密码安全总是各个公司和用户都非常关心的一个内容,毕竟现在大家不管是休闲娱乐还 ...

  • Python2与Python3有哪些不同之处

    众所周知,Python3是Python2的升级改进版,既包含了Python2的绝大部分内容,同时又做出了一些不一样的改变.据说,Python2将于2020年左右不再免费更新维护,作为Python2的坚 ...

  • Python入门之os模块详解

    Python入门之os模块详解

  • Python基础入门第二节——正则表达式详解!

    Python基础入门第二节——正则表达式详解!

  • Python循环语句代码逐行详解:while、for、break和continue

    导读:循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算.Python中的循环语句有while语句.for语句. 作者:黄传禄 张克强 赵越 来源:大数据DT(ID:hzdashuju) ...

  • Python for循环及用法详解

    Python 中的循环语句有 2 种,分别是 while 循环和 for 循环,前面章节已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串.列表.元组.字典.集合等序 ...

  • (1条消息) Python 多进程 multiprocessing.Pool类详解

    multiprocessing模块 multiprocessing包是Python中的多进程管理包.它与 threading.Thread类似,可以利用multiprocessing.Process对 ...

  • Python中的魔术方法详解

    介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",中文称『魔术方法』,例如类的初始化方法 __init__ ,P ...

  • (三)MyBatis从入门到入土——使用详解

    MyBatis使用详解 上篇我们手动开发了一个MyBatis项目,但是我们仅仅是编写了代码,对于整个项目是如何运行以及每个代码的意义都没有仔细的分析和说明,那么接下来我们就开始分析每个代码的意义以及如 ...

  • 奇门遁甲 | 入门知识之九宫详解及太极认知原理

    奇门遁甲是体现易学思维科学精华六大论的一种比较完整的时空象数理模型,是中国人认知客观世界的一种特殊的摹拟方式. 第一节奇门九宫格的太极认知原理 宇宙是时间和空间的结合,时间是无始无终的,空间是没有边际 ...

  • MySQL字段默认值设置详解

    前言: 在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值.关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字 ...