hashlib 模块用来进行hash
hashlib的基本概述:
python中的 hashlib 模块用来进行hash 或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法,
其支持Opennssl库提供的所有算法,包括 md5、sha1、sha224、sha256、sha512 等。
hash是一种算法 是将一个任意长的数据 根据计算 得到一个固定长度特征吗
特征:1、不同输入 可能会有相同的结果 几率特别小
2、相同的输入 必然得到相同结果
3、由于散列(特征)的性质 从原理来看是不可能 反解
4、用来 验证 两个输入的数据是否一致
使用场景:
1、密码验证
2、验证数据是否被篡改 比如游戏安装包 有没有被改过
为了防止别人撞库成功 可用提升密码的复杂度 其次可以为密码加盐(加点内容进去)
ps:撞库破解的原理 把常见的 明文和密文的对应关系 存到了数据库中 运气好就能查询到
常用的属性和方法:
algorithms : 列出所有加密算法
digesti——size: 产生的散列的字节大小
md5()/sha1() :创建一个 md5 或者 sha1加密模式的hash 对象
update(arg) :用字符串参数来更新hash对象,如果同一个has对象重复调用该方法,如下:m.update(a); m.update(b), 则等于m.update(a+b)
digest() : 返回摘要,作为二进制数据字符串值
hexdigest() : 返回摘要,作为十六进制数据字符串值
copy() :复制
下面是一个简单的实例:
import hashlib
m = hashlib.md5("aaa".encode("utf-8"))
print(m.hexdigest())
结果如下:
47bce5c74f589f4867dbd57e9ca9f808
下面是一个简单的加盐实例:
import  hashlib
m = hashlib.md5("".encode("utf-8"))
#加
m.update("abcdefplkjoujhh".encode("utf-8"))
print(m.hexdigest())
结果如下:
7da0befdd8fd811dd0716941c38c0111
关于hmac 的实例:
import hmac
# 与hashlib 没啥区别 只是在创建的时候必须加盐
h = hmac.new("abcdefjjjj".encode("utf-8")) h.update("".encode("utf-8")) print(h.hexdigest())
结果如下:
944b3523fac69f32f6d399a11707da8b
如何产生hash值的三个阶段:
import hashlib
# # ######## sha256 ########
# # 1、造出hash工厂
hash = hashlib.sha256('12345ds232'.encode('utf8')) #同一种hash算法得到的长度是固定的
# # 2、运送原材料
hash.update('alvin'.encode('utf8')) #工厂传入的原材料都是bytes类型
# # 3、产出hash值
print(hash.hexdigest()) #结果:0f63932f6e2b2d1e0d9c2d50f0e9d39b79da78a5048a6d054d7f9c27d1a8761a
效验文件的一致性(如何保证下载的文件过程中不丢包,保证数据的完整性!):
# -----------文件一致校验----------------
'''可以拷贝一个文件放在两个不同的盘中,然后通过判断两个文件的hash值是否相等,判断两个文件是否是同一个文件'''
import hashlib
m = hashlib.md5()
with open(r'F:\oldboy课程记录\目录创建函数.py','rb') as f:
for line in f:
m.update(line)
print(m.hexdigest()) #18b6754864943d03b5b2aedacb449466 import hashlib
m = hashlib.md5()
with open(r'F:\oldboy课程记录\购物车练习.py','rb') as f:
for line in f:
m.update(line)
print(m.hexdigest()) #8e63f67a0049d1fc583a5c2bbf6cf3a8
对密码进行加盐(加密):
# 应用:对明文密码进行加密(暴力破解-------用明文密码用一种算法算出一个hash值,与截取的hash值进行比对,比对成功说明明文密码一致,就可以破解用户的密码)
'''如用户在某网站进行注册信息,这个时候防止信息被恶意拦截获取,可以对用户明文密码进行加密,存成hash值得形式,这样用户每次登陆虽然输的是明文密码,校验hash值即可'''
#未加密
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update(password.encode('utf-8'))
print(m.hexdigest()) #00dcbdaede875d5e23f1f9f64c7849ef # 对密码进行加盐(暗号)----------进一步加强密码的安全性
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update('一行白鹭上青天'.encode('utf-8')) #对密码加盐
m.update(password.encode('utf-8'))
print(m.hexdigest())
hmac模块的加密方式,与hashlib差不多:
'''python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:'''
import hmac
h = hmac.new('天王盖地虎'.encode('utf8')) #hmac必须要加盐
h.update('hello'.encode('utf8'))
print(h.hexdigest()) #1abaae8f65f68f2695a8545c5bc8e738 #要想保证hmac最终结果一致,必须保证:
#1:hmac.new括号内指定的初始key一样
#2:无论update多少次,校验的内容累加到一起是一样的内容
# 下面单重方式得到的结果是一样的
import hmac
h1=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())
结果如下:
0426ccec3b134e8c18fdcefee841ef25
0426ccec3b134e8c18fdcefee841ef25
ff1214d895bbaf5f1847db4ebae8212e
破解用户的密码:
# 重点
'''模拟撞库破解密码'''
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 dic def 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的字典当做函数的实参传给对应的形参
hashlib 模块用来进行hash的更多相关文章
- re模块、hashlib模块
		一.re模块 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,正则就是用来去一个大的字符串中匹配出符合规则的子字符串 2.为何要用正则? 用户注册 ... 
- python学习笔记(六)time、datetime、hashlib模块
		一.hashlib模块 python中的hashlib模块用来进行hash或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法.在python3的版本里,代替了md5和sha模块,主要 ... 
- python hashlib模块
		用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib m=hash ... 
- 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全栈开发-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函 ... 
- python hashlib模块  md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐
		python hashlib模块 hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ... 
随机推荐
- 微信小程序—如何获取用户输入文本框的值
			我们就拿简单常用的登录来举例子吧,先看最终效果图片 
- xadmin的使用
			01-下载源码 GitHub地址:https://github.com/sshwsfc/xadmin # 安装xadmin 由于使用的是Django2.0的版本,所以需要安装xadmin项目djang ... 
- Leetcode 101. Symmetric Tree(easy)
			Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ... 
- Unix / Linux 线程的实质
			线程与进程的比较 概述: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小 ... 
- 解决ERR Client sent AUTH, but no password is set
			在搭建cookies池时,需要将账号密码保存到redis,保存时报错:ERR Client sent AUTH, but no password is set 报错原因:Redis服务器没有设置密码, ... 
- [转帖]一键获取 所有连接过的wifi 密码
			cmd 一键获取 所有连接过的wifi 密码 转帖来源: http://www.cnblogs.com/hookjoy/p/5537623.html for /f "skip=9 token ... 
- 下拉框、下拉控件之Select2
			一.Select2的功能简介 select2插件给我们带来了更加友好的交互方式,比如查询控件展开后可通过关键字进行检索 例如: Select2也可以选择带查询控件的选择框... Select2也可以选 ... 
- python爬虫scrapy之如何同时执行多个scrapy爬行任务
			背景: 刚开始学习scrapy爬虫框架的时候,就在想如果我在服务器上执行一个爬虫任务的话,还说的过去.但是我不能每个爬虫任务就新建一个项目吧.例如我建立了一个知乎的爬行任务,但是我在这个爬行任务中,写 ... 
- python爬虫之scrapy安装(一)
			简介: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrap ... 
- drf实现图片验证码功能
			一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ... 
