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

  1. re模块、hashlib模块

    一.re模块 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,正则就是用来去一个大的字符串中匹配出符合规则的子字符串 2.为何要用正则? 用户注册 ...

  2. python学习笔记(六)time、datetime、hashlib模块

    一.hashlib模块 python中的hashlib模块用来进行hash或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法.在python3的版本里,代替了md5和sha模块,主要 ...

  3. python hashlib模块

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

  4. Python hashlib模块 (主要记录md5加密)

    python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...

  5. Python学习笔记——基础篇【第六周】——hashlib模块

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

  6. Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  7. python全栈开发-hashlib模块(数据加密)、suprocess模块、xml模块

    一.hashlib模块 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 ...

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

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

  9. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

随机推荐

  1. python之间的基础

    编程第一步 print('hello,world!') 变量名的命名的规则: 1:变量由字母,数字,下划线组成 2:变量不能以数字开头 3:禁止使用python中的关键字,如 'alse', 'Non ...

  2. python第七章:常用模块--小白博客

    yagmail模块 python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了 ...

  3. Nginx 通过 Lua + Redis 实现动态封禁 IP

    一.背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 二.架构 实现 IP 黑名单的功能有很多途径: 1.在操作系统层面 ...

  4. CONTINUE...?模拟分情况

    CONTINUE...? DreamGrid has  classmates numbered from  to . Some of them are boys and the others are ...

  5. Python-类的组合与重用

    软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 1.继承的方式 通过继承建立了派生类与基类之间的关系,它是一种'是'的关系 ...

  6. R语言绘制箱型图

    箱形图是数据集中数据分布情况的衡量标准.它将数据集分为三个四分位数.盒形图表示数据集中的最小值,最大值,中值,第一四分位数和第四四分位数. 通过为每个数据集绘制箱形图, 比较数据集中的数据分布也很有用 ...

  7. 使用队列queue实现一个简单的生产者消费者模型

    一.生产者消费者模型 我们去超市商店等地购买商品时,我们大部分人都会说自己是消费者,而超市的各大供货商.工厂等,自然而然地也就成了我们的生产者.如此一来,生产者有了,消费者也有了,那么将二者联系起来的 ...

  8. Redis Sentinel 集群搭建常见注意事项

    我的配置: 1个master,1个slave,3个sentinel 搭建的过程网上已经有很多了,这里列几个重点关注: 修改sentinel.conf的protected-mode与redis.conf ...

  9. PHP--高级算法--面试

    数据结构和算法(转载) 原文地址:  https://blog.csdn.net/s1070/article/details/51174725 1.使对象可以像数组一样进行foreach循环,要求属性 ...

  10. java.lang(StringBuffer)

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...