【转】python模块分析之hashlib加密(二)
hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系;用于注册、登录时用户名、密码等加密使用。
一.函数分析:
1.共有5种加密算法:
md5(),sha1(),sha224(),sha256(),sha384(),sha512(),分别得到不同的加密密文。
2.hashlib.hexdigest():获取加密的密文,16进制,无参数。
3.hashlib.digest():获取加密的密文,二进制,无参数。
4.hashlib.copy():复制一份当前创建的hash对象,无参数。
5.update(str1.encode("utf-8")):更新加密的密文,得到的密文与原来的密文不相同。
hash.name:查看当前获得的hash对象的加密算法;
hash.digest_size:hash密文占多少个字节;
hash.block_size:hash数据块的大小。
hashlib.algorithms_guaranteed:查看所有平台都支持的hash算法;
hashlib.algorithms_available:查看所有的hash加密算法。
二。运用:
1.创建哈希对象,有两种方式:
m = hashlib.new("md5",b"cai") # 选择md5加密函数加密字符串“cai”
m = hashlib.md5("cai".encode("utf-8")) # 加密的另一种写法
2.特殊用法:当需要加密的字符串过大的时候,可以使用同一个hash对象分多次加密,update(a)+update(b)=update(a+b).
举例:
m = hb.md5()
m1 = m.copy()
m.update("a".encode("utf-8"))
m.update("b".encode("utf-8"))
print(m.hexdigest()) # 输出密文1
m1.update("ab".encode("utf-8"))
print(m1.hexdigest()) # 输出与密文1完全相同的密文2
三、hash算法的解密
加密算法得到的密文不可逆,但是密文与明文之间的关系是一一对应的,这就使得解密出现了可能,目前对于简单的、迭代次数少或不加盐处理密文,常用
方法是用大数据储存密文与明文的对应关系。
如常用的解密网站:http://www.cmd5.com/
通过输入密文查找对应的明文。
为了增大破解的难度,一般需要对密码进行多次迭代加密和加盐处理,hashlib模块有一个专门的函数。
import hashlib as hb
import binascii
# sha256为算法名称,123456789为要加密的密码,
# salt指的是杂质,额外的东西,使得更加难破解,10000是迭代次数,可以理解成加密次数。
dk = hb.pbkdf2_hmac('sha256', b'', b'salt', 10000) # 密码和杂质都需要是二进制类型
print(binascii.hexlify(dk).decode("utf-8"))
代码举例:
import hashlib as hb def hash_fun(str1):
m = hb.md5(str1.encode("utf-8")) # 创建一个hash对象,并对str1加密
print(m.hexdigest()) # 输出得到的密文
m.update(str1.encode("utf-8")) # 更新密文
print(m.hexdigest()) # 输出更新密文,与前面不再相同
print(m.digest()) # 获取字节密文
print(m.block_size) # 获取hash块的大小
print(m.digest_size) # 获取密文的字节数
print(m.name) # 获取加密算法的名字md5 def hash_fun2(str1):
m = hb.md5(str1.encode("utf-8"))
print(m.hexdigest())
a = m.copy() # 拷贝一个hash对象
print(a.hexdigest()) # 得到的密文没改变 def hash_fun1(str1):
m = hb.sha1(str1.encode("utf-8")) # sha1算法加密
print(m.hexdigest())
m1 = hb.sha224(str1.encode("utf-8")) # sha224算法加密
print(m1.hexdigest()) def hash_fun3():
m = hb.md5()
m1 = m.copy()
m.update("a".encode("utf-8"))
m.update("b".encode("utf-8"))
print(m.hexdigest())
m1.update("ab".encode("utf-8"))
print(m1.hexdigest()) if __name__ == '__main__':
hash_fun("cai")
print()
hash_fun1("cai")
print()
hash_fun2("cai")
print()
hash_fun3()
结果如下:

【转】python模块分析之hashlib加密(二)的更多相关文章
- python模块分析之hashlib加密(二)
前言 hashlib模块是py3.+用来对字符串进行hash加密的模块,核心算法是md5,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用. 模块分析 hashlib模块有多种加 ...
- 【转】python模块分析之collections(六)
[转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...
- 【转】python模块分析之unittest测试(五)
[转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...
- 【转】python模块分析之typing(三)
[转]python模块分析之typing(三) 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度 ...
- 【转】python模块分析之logging日志(四)
[转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...
- python模块分析之typing(三)
前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度,加上Python本身就是一门弱类型的语言,这种 ...
- python模块分析之logging日志(四)
前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...
- python模块详解 hashlib
hashlib模块 用于加密相关的操作,在python3中替代了md5和sha模块,主要提供SHA和MD5算法. MD5 import hashlib m = hashlib.md5() #调用md5 ...
- python模块学习之hashlib模块学习
# 加密模块 import hashlib # md5 加密 md5 # 1.初始化md5模块 生成md5对象 # 2.引入要加密的数据 update # 3.获取加密值 hexdigest m = ...
随机推荐
- Linux中sed的用法实践
Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...
- 使用Redis模拟简单分布式锁,解决单点故障的问题
需求描述: 最近做一个项目,项目中有一个功能,每天定时(凌晨1点)从数据库中获取需要爬虫的URL,并发送到对应的队列中,然后客户端监听对应的队列,然后执行任务.如果同时部署多个定时任务节点的话,每个节 ...
- 2017-12-14python全栈9期第一天第一节之太白自我介绍和内容大纲
1.计算机基础 2.python历史 3.python的环境 4.Python的发展 5.python的种类 6.变量 7.常量 8.注释 9.用户交互 10.基础类型初始 11.if 12.whil ...
- gcc生成含有C信息的汇编
title: gcc生成含有C信息的汇编 tags: gcc date: 2018-10-24 23:40:19 --- https://www.cnblogs.com/fengkang1008/p/ ...
- 8.Hystrix-Feign配置服务降级
项目中用到Feign调用服务端方法并做服务降级处理 1.application.properties配置: feign.hystrix.enabled=true 2.pom: <!--feign ...
- FeignClient调用POST请求时查询参数被丢失的情况分析与处理
前言 本文没有详细介绍 FeignClient 的知识点,网上有很多优秀的文章介绍了 FeignCient 的知识点,在这里本人就不重复了,只是专注在这个问题点上. 查询参数丢失场景 业务描述: 业务 ...
- Linux下main函数启动过程【程序员自我修养笔记】【自用】
1. 入口函数和程序初始化 1.1 程序从main开始吗? 当程序执行到main函数的第一行时,很多事情都已经完成了: [证1]如下是一段C语言代码: 代码中可以看到,在程序刚刚执行到main的时候, ...
- HanLP 关键词提取算法分析
HanLP 关键词提取算法分析 参考论文:<TextRank: Bringing Order into Texts> TextRank算法提取关键词的Java实现 TextRank算法自动 ...
- string.GetHashCode获取值不一样
今天在使用程序时发现两个String.GetHashCode值不一样,通过测试 (1)程序在两台不同的计算机上运行,没有变化. (2)修改32位,64位,值有变化,说明GetHashCode和.net ...
- 【十二】jvm 性能调优工具之 jhat (JVM Heap Analysis Tool)
jhat也是jdk内置的工具之一.主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言. jhat 非常耗费cpu和内存,所以一般不使 ...