Python3学习之路~5.12 hashlib & hmac & md5 & sha模块
hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import md5 hash = md5.new()
hash.update('Hello')
print hash.hexdigest()
md5-废弃
import sha hash = sha.new()
hash.update('Hello')
print hash.hexdigest()
sha-废弃
import hashlib # ######## md5 #########
hash = hashlib.md5()
hash.update(b"Hello")
hash.update(b"It's me")
print(hash.digest()) # b']\xde\xb4{/\x92Z\xd0\xbf$\x9cR\xe3Br\x8a' 二进制数据字符串
print(hash.hexdigest()) # 5ddeb47b2f925ad0bf249c52e342728a 16进制格式hash,明文为“HelloIt's me”
print(len(hash.hexdigest())) # hash2 = hashlib.md5()
hash2.update('你好'.encode(encoding='utf-8'))
print(hash2.hexdigest()) # 7eca689f0d3389d9dea66ae112e5cfd7 # ######## sha1 #########
hash =hashlib.sha1()
hash.update(b'Hello')
print(hash.hexdigest()) # f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 # ######## sha256 ########
hash = hashlib.sha256()
hash.update(b'Hello')
print(hash.hexdigest()) # ######## sha384 ########
hash = hashlib.sha384()
hash.update(b'Hello')
print(hash.hexdigest()) # ######## sha512 ########
hash = hashlib.sha512()
hash.update(b'Hello')
print(hash.hexdigest())
hashlib模块使用
以上加密算法虽然依然非常厉害,但存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
import hashlib hash = hashlib.md5(b'898oaFs09f') # key即898oaFs09f
hash.update(b'Hello') # 明文为Hello
print(hash.hexdigest())
还不够吊?python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。
使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;
一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。
import hmac h = hmac.new(b'mykey',msg=b'Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78 h = hmac.new(b'mykey',msg='你好'.encode(encoding='UTF-8'))
print(h.hexdigest()) # 0fc9eba32da88e49cefa687b7e6d6927 h = hmac.new(b"mykey") # key = 'mykey'
h.update(b'Hello world') # msg='Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78
hmac模块使用
更多关于md5,sha1,sha256等介绍的文章看这里https://www.tbs-certificates.co.uk/FAQ/en/sha256.html
补充:base64模块
很多互联网请求的消息头传送字段值时都会对其进行加密。一般是先计算MD5加密的32位字符串(或者二进制数组(128位)),然后再对其进行base64编码,以Python3为例,代码如下:
import hashlib,base64
a =hashlib.md5()
a.update("".encode())
print("MD5加密后的32位字符串:",a.hexdigest())
print("base64编码1",base64.b64encode(a.hexdigest().encode()))
print("MD5加密后的二进制数组(128位):",a.digest())
print("base64编码2",base64.b64encode(a.digest()))
输出如下:
MD5加密后的32位字符串: 781e5e245d69b566979b86e28d23f2c7
base64编码1 b'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='
MD5加密后的二进制数组(128位): b'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'
base64编码2 b'eB5eJF1ptWaXm4bijSPyxw=='
Python3学习之路~5.12 hashlib & hmac & md5 & sha模块的更多相关文章
- Python3学习之路~0 目录
目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...
- Qt 学习之路 2(6):Qt 模块简介
Home / Qt 学习之路 2 / Qt 学习之路 2(6):Qt 模块简介 豆子 2012年8月26日 Qt 学习之路 2 20条评论 Qt 5 与 Qt 4 最大的一个区别之一是底层架构 ...
- Python3学习之路
python基础知识点 1.python基础知识点汇总 2.python常用数据类型 3.python之列表 4.python之字符串 5.python常用数据运算符 6.python之字典 7.py ...
- 微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证
前端时间花了1个多星期的时间写了使用jQuery.Validate进行客户端验证,但是那仅仅是客户端的验证,在开发项目的过程中,客户端的信息永远是不可信的,所以我们还需要在服务器端进行服务器端的验证已 ...
- 微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目
现在我就开始进入学习之路的第二步——Data Access模块,这个模块是企业库中被使用频率最高的模块,它很好的封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就 可以很快 ...
- Python3学习之路~8.6 开发一个支持多用户在线的FTP程序-代码实现
作业: 开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp s ...
- Python3学习之路~8.4 利用socket实现文件传送+MD5校验
利用socket实现文件传送,大约分为如下几步: 1.读取文件名2.检测文件是否存在3.打开文件(别忘了最后关闭文件)4.检测文件大小5.发送文件大小给客户端6.等客户端确认7.开始边读边发数据8.m ...
- Python3学习之路~9.1 paramiko模块:实现ssh执行命令以及传输文件
我们一般使用linux的时候,都是在Windows上安装一个ssh客户端连接上去.那么从一台linux如何连接到另一条linux呢?使用ssh命令即可,因为每台linux机器自己都有一个ssh客户端. ...
- Python3学习之路~8.5 SocketServer实现多并发
前面几节我们写的socket都只能实现服务端与一个客户端通信,并不能实现服务端与多客户端同时通信.接下来我们就来学习一下如何实现服务端同时与多个客户端通信,即并发. Socket Server soc ...
随机推荐
- python--第八天总结
一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) ...
- Python(字符编码)
https://www.cnblogs.com/zihe/p/6993891.html 一 了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开 ...
- django项目settings.py的基础配置
一个新的django项目初始需要配置settings.py文件: 1. 项目路径配置 新建一个apps文件夹,把所有的项目都放在apps文件夹下,比如apps下有一个message项目,如果不进行此项 ...
- APK优化工具zipalign的详细介绍和使用
什么是Zipalign? Zipalign是一个android平台上整理APK文件的工具,它首次被引入是在Android 1.6版本的SDK软件开发工具包中.它能够对打包的Android应用 ...
- AICODER官方小程序和公众号上线了
小伙伴们,新年好. 在新的一年里,AICODER将继续为大家提供优质的视频资源,为大家提供一个优质的问题解答平台,并且开始提供优质的职业提升类的优质培训资源. 感谢各位一直以来的支持和关注.请加一下A ...
- 【iCore1S 双核心板_FPGA】例程十七:基于双口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: module DUAL_PORT_RAM( input CLK_12M, inout WR, input RD, input CS0, :]A, :]DB, output FP ...
- plsql 通过修改配置文件的方式实现数据库的连接
查看oracle的安装位置: XP系统: 开始>>所有程序>>>Oracle-OraDb10g_home1>>>配置和移植工具>>>右 ...
- Github + Hexo 搭建个人博客
参考博客: 我是如何利用Github Pages搭建起我的博客,细数一路的坑 使用Hexo+Github一步步搭建属于自己的博客(基础) Hexo 准备工作: 本机已安装好 git, npm 和 no ...
- maven and jwt
以目前浅薄的理解,jwt就是一种加密token的手段,这个token也只有自己能解开,如果客户端以cookie存这个token,可能会存在cookie被窃取的情况. 另外,jwt这中加密方式因为有过期 ...
- tensorflow冻结变量方法(tensorflow freeze variable)
最近由于项目需要,要对tensorflow构造的模型中部分变量冻结,然后继续训练,因此研究了一下tf中冻结变量的方法,目前找到三种,各有优缺点,记录如下: 1.名词解释 冻结变量,指的是在训练模型时, ...