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

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

可以免费领取源码项目实战视频PDF文件

二:将指定的 “字符串” 进行加密。使用hashlib的分步解析

1)在进行md5哈希运算前,需要对数据进行编码,否则报错

import hashlibobj = hashlib.md5()   #构造一个hashlib的对象
obj.update("小马过河")  #update对指定字符串进行加密
print(obj)
--------------结果:obj.update("小马过河")
TypeError: Unicode-objects must be encoded before hashing

2)obj是hash对象

import hashlibobj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
print(obj,type(obj))
-------------------结果:
<md5 HASH object @ 0x001C5590> <class '_hashlib.HASH'>

3)

import hashlibobj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
result=obj.hexdigest()
print(result)
--------------结果:
24f67b0f6d02adc8867d612e0e0fc40a

4)给加密增添难度

import hashlibobj = 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 resultval = get_md5('123')print(val)--------------结果:35093270b6352fa9721370b781f7b4d7

三:应用场景案例:用户账号密码登录,对明文密码进行加密

import hashlibUSER_LIST = []
def get_md5(data):obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))obj.update(data.encode('utf-8'))result = obj.hexdigest()return resultdef register():print('**************用户注册**************')while True:user = input('请输入用户名:')if user == 'N':returnpwd = 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 Trueregister()
result = login()
if result:print('登陆成功')else:print('登陆失败')------------------------结果:**************用户注册**************请输入用户名:小马过河请输入密码:123456请输入用户名:N**************用户登陆**************请输入用户名:小马过河请输入密码:123456登陆成功

用户登录场景分析:实现用户注册,然后进行用户登录的代码分析。

代码分析:

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

# -----------文件一致校验----------------'''可以拷贝一个文件放在两个不同的盘中,然后通过判断两个文件的hash值是否相等,判断两个文件是否是同一个文件'''
import hashlib
m = 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'))

六、破解用户注册的密码

# 重点
'''模拟撞库破解密码'''import hashlib
passwds=[                      #可以通过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'''

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:Python极客专栏

Python模块学习——hashlib模块讲解相关推荐

  1. python hashlib模块_python3 hashlib模块

    Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...

  2. md5模块和hashlib模块

    注释: md5模块以及过时了, 用hashlib模块来加密. hashlib是个专门提供hash算法的库,现在里面包括md5, sha1, sha224, sha256, sha384, sha512 ...

  3. python包mdure_Python hashlib模块实例使用详解

    这篇文章主要介绍了Python hashlib模块实例使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hashlib模块主要的作用: 加密保 ...

  4. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...

    一.前提介绍: 可以开辟作用域的只有类,函数,和模块            for循环 if,else: 不能开辟自己的作用域 避免程序复用和重复调用,将这些写到一个.py文件中,做成一个模块,进行调 ...

  5. python hashlib_python中hashlib模块用法示例

    我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib hashlib主要提供字符加密功能,将md5和 ...

  6. python hashlib_python之hashlib模块

    hashlib模块是python内置的摘要算法. hashlib有两种调用方式: 第一种是hashlib.new方法 new(name, data=b'', **kwargs) - returns a ...

  7. python之time模块和hashlib模块

    一.time模块 import time print(time.strftime('%Y-%m-%d %H:%M:%S'))#获取当前的格式化时间,time.strftime(format) prin ...

  8. python中的hashlib模块

    1 hashlib模块的作用: hashlib是一个提供字符串加密功能的模块,包含MD5和SHA的算法,MD5和SHA是摘要算法,摘要算法是什么呢: 也可以称为哈希算法,离散算法.通过一个函数将任意长 ...

  9. python smtplib模块_Python模块学习 ---- smtplib模块

    SMTP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.这里我们就需要用到这个库.其 ...

最新文章

  1. java中final使用
  2. 作者:​光亮(1982-),男,博士,华为技术有限公司高级标准经理。
  3. Interval(区间类问题)
  4. 二十四种设计模式:策略模式(Strategy Pattern)
  5. 使用计算机的硬件及参数,硬件参数怎么看?如何选配电脑硬件?
  6. Visual Studio 要求导入 pfx 密钥以及导入后依然要求导入的解决办法
  7. js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
  8. arraylist有顺序吗_美团Java研发岗二面:什么叫线程安全?servlet是线程安全吗?...
  9. HP laserjet 1022n打印机总出现前端盖打开或者缺少硒鼓对话框,无法打印?
  10. 百度360争推1TB永久网盘
  11. springmvc ajax 传参
  12. stony大学计算机科学找工作,如果我本科四年在加州大学洛杉矶分校安德森商学院就读,毕业后我实在当地找工作好还是回国比较好?哪个待...
  13. 201927 钢琴指法简介
  14. vue 萤石_Vue 莹石摄像头直播视频实例代码
  15. 多线程----守护线程---Deamon
  16. MOSS工作流 InfoPath+WorkFlow+Moss 开发要点
  17. IE与Firefox火狐的CSS兼容大全
  18. Linux就该这么学--第五期 学习笔记
  19. grep -rn搜索服务配置文件信息、log字段信息
  20. python自动刷新12306抢票

热门文章

  1. Centos安装到U盘的详细方法
  2. Python序列练习题【第十二周】
  3. 创大资本许洪波:区块链的划时代意义和三大趋势
  4. 个人计算机配置清单和配置理由,专为游戏而生 八九千元i7-8700配GTX1070Ti高端组装台式机配置清单...
  5. HNUST-OJ-1741-好友互动标识
  6. fq,fa,fna,ffn,faa都是什么鬼,与fasta,fastq格式有什么关系?终于1分钟搞懂了
  7. 出圈的盼盼,失去了年轻人
  8. win10任务管理器快捷键_你都知道吗?Win10 任务管理器到底藏了多少 “小秘密”...
  9. 删除本地账户无法登录电脑_如何从Windows的登录屏幕中删除本地用户帐户
  10. 在VScode中导入anaconda中已安装好的库