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

  1. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

  2. Qt 学习之路 2(6):Qt 模块简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(6):Qt 模块简介  豆子  2012年8月26日  Qt 学习之路 2  20条评论 Qt 5 与 Qt 4 最大的一个区别之一是底层架构 ...

  3. Python3学习之路

    python基础知识点 1.python基础知识点汇总 2.python常用数据类型 3.python之列表 4.python之字符串 5.python常用数据运算符 6.python之字典 7.py ...

  4. 微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证

    前端时间花了1个多星期的时间写了使用jQuery.Validate进行客户端验证,但是那仅仅是客户端的验证,在开发项目的过程中,客户端的信息永远是不可信的,所以我们还需要在服务器端进行服务器端的验证已 ...

  5. 微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目

    现在我就开始进入学习之路的第二步——Data Access模块,这个模块是企业库中被使用频率最高的模块,它很好的封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就 可以很快 ...

  6. Python3学习之路~8.6 开发一个支持多用户在线的FTP程序-代码实现

    作业: 开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp s ...

  7. Python3学习之路~8.4 利用socket实现文件传送+MD5校验

    利用socket实现文件传送,大约分为如下几步: 1.读取文件名2.检测文件是否存在3.打开文件(别忘了最后关闭文件)4.检测文件大小5.发送文件大小给客户端6.等客户端确认7.开始边读边发数据8.m ...

  8. Python3学习之路~9.1 paramiko模块:实现ssh执行命令以及传输文件

    我们一般使用linux的时候,都是在Windows上安装一个ssh客户端连接上去.那么从一台linux如何连接到另一条linux呢?使用ssh命令即可,因为每台linux机器自己都有一个ssh客户端. ...

  9. Python3学习之路~8.5 SocketServer实现多并发

    前面几节我们写的socket都只能实现服务端与一个客户端通信,并不能实现服务端与多客户端同时通信.接下来我们就来学习一下如何实现服务端同时与多个客户端通信,即并发. Socket Server soc ...

随机推荐

  1. 具体解释MVP矩阵之ViewMatrix

    矩阵推导 ViewMatrix用于直接将World坐标系下的坐标转换到Camera坐标系下.已知相机的坐标系.还有相机在世界空间下的坐标.就能够求出ViewMatrix.以下进行具体推导. 令UVN为 ...

  2. C语言 · 组合数

    组合数 从4个人中选2个人参加活动,一共有6种选法. 从n个人中选m个人参加活动,一共有多少种选法?下面的函数实现了这个功能. 请仔细分析代码,填写缺少的部分(下划线部分). 注意:请把填空的答案(仅 ...

  3. tun/tap设备_虚拟网卡

    tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装.利用tun/tap 驱动,可以将tcp/ip协议栈处理好的 ...

  4. Use OWIN to Self-Host ASP.NET Web API 2 来访问我的webapi

    就是说我们本地的http://localhost:49708/api/test可以通过 这个东西来访问(懒得挂载iis,当然它的强大可不这些,由于测试出了问题 出记录一下) 首先去Nuget包里找到M ...

  5. 【转】Flask入门之上传文件到服务器

    #Sample.py # coding:utf-8 from flask import Flask,render_template,request,redirect,url_for from werk ...

  6. springmvc date

    数据格式化,从本质上讲属于数据转换的范畴.Spring就是基于数据转换框架植入“格式化”功能的. 在数据转换时我们进行了如下配置: 我们使用的是ConversionServiceFactoryBean ...

  7. 阻止a链接跳转方法总结

    总结下a标签阻止默认行为的几种简单方法(1) <a href="javascript:void(0);" > 点我 </a> onclick方法负责执行js ...

  8. Linux set、env、declare、export显示shell变量的区别

    目录 Linux中 set.env.declare.export显示shell变量的区别 1. shell局部变量 2. 用户的环境变量 显示shell变量 declare 命令 export 命令 ...

  9. ReentrantLock可重入锁的理解和源码简单分析

    import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; /** * @author ...

  10. (二)区块链的共识算法:PoS 及其 例子 代码 实现

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...