day5-hashlib模块
一、概述
在程序开发过程中,很多时候会涉及用户信息验证环节,这类场景下我们往往需要对字符串进行加密处理。python中也有专门的加密模块,它就是hashlib。下面章节将详述它的常见用法。
二、常见加密算法的使用
hashlib模块支持业界主流常见的一些加密算法,如md5,sha1,sha256,sha384,sha 512,hmac加密等,具体用法都差不多,只是调用的算法不同而已。需要注意的是,在输入需要被加密的字符串时,必须先encode等二进制串,所以在字符串前面要加上b。
2.1 md5加密
直接上代码把,没有太多可以讲述的了。
1 import hashlib
2
3 m = hashlib.md5() #创建一个md5对象,即通过md5加密处理
4 m.update(b'python') #此处传递的字符串需要encode成二进制,前面加b
5 print(m.hexdigest()) #以16进制输出
6
7 输出:
8 23eeeb4347bdd26bfc6b7ee9a3b755dd
注意:
这里的update有点类似于append的作用,当我们连续两次update后输出时,最后输出的md5码并非最后一次update的字符串对应的md5码,而是对此前所有update的字符串的拼接后计算出的md5码,当然前提是update前面的对象是同一个。
如何验证这个结论呢?代码奉上:
1 import hashlib
2
3 m = hashlib.md5()
4 m.update(b'py')
5 print(m.hexdigest())
6 m.update(b'thon')
7 print(m.hexdigest())
8 print('-------')
9 n = hashlib.md5()
10 n.update(b'python')#一次性update一个字符串
11 print(n.hexdigest())
12 print('========')
13 o = hashlib.md5()
14 o.update(b'py'+b'thon')#自行拼接字符串输出
15 print(o.hexdigest())
16
17 输出:
18 dfed5bc177b87ab317c584e06566adc6
19 23eeeb4347bdd26bfc6b7ee9a3b755dd
20 -------
21 23eeeb4347bdd26bfc6b7ee9a3b755dd
22 ========
23 23eeeb4347bdd26bfc6b7ee9a3b755dd
从以上代码可以看出,对同一个md5对象多次update字符串,输出的md5码实际是对多个字符串拼接后的md5计算。这里也给我们一个启示,如果要计算一个文件的md5码,如果文件长度不会对机器的硬件资源造成压力,一次性读取内容后进行md5计算是最快捷的方式了。
2.2 sha1加密
如上文所述,其他算法的用法非常类似,只是调用的算法不同罢了。
1 import hashlib
2
3 m = hashlib.sha1()
4 m.update(b'sha1')
5 print(m.hexdigest())
6
7
8 输出:
9 415ab40ae9b7cc4e66d6769cb2c08106e8293b48
2.3 sha256加密
如法炮制sha256算法
1 import hashlib
2
3 m = hashlib.sha256()
4 m.update(b'sha1')
5 print(m.hexdigest())
6 输出:
7 b1565820a5cdac40e0520d23f9d0b1497f240ddc51d72eac6423d97d952d444f
2.4 sha512加密
看看sha512算法把。
1 import hashlib
2
3 m = hashlib.sha512()
4 m.update(b'sha1')
5 print(m.hexdigest())
6
7 输出:
8 4af46fa0152c825afee230022f46e3aedb0a9ee2a3dc20e30821a4d263327074b26455f29578812876011dd921132c6ed813b38d16b1b2a1c1fa7cea1a6b1fd9
2.5 hmac加密
以上加密算法主要用于字符串的加密处理,还有一种用于身份验证可防窃听的加密算法,它就是hmac加密。散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制,是一种基于密钥的哈希算法的认证协议。
HMAC加密算法是一种基于密钥的报文完整性的验证方法,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。HMAC加密算法可以用来作加密、数字签名、报文验证等。
HMAC加密算法的定义
HMAC加密算法是一种执行“校验和”的算法,它通过对数据进行“求和”来检查数据是否被更改了。在发送数据以前,HMAC加密算法对数据块和双方约定的公钥进行“散列操作”,以生成称为“摘要”的东西,附加在待发送的数据块中。当数据和摘要到达其目的地时,就使用HMAC加密算法来生成另一个校验和,如果两个数字相匹配,那么数据未被做任何篡改。否则,就意味着数据在传输或存储过程中被某些居心叵测的人作了手脚。
实际的典型应用场景是挑战/响应”(Challenge/Response)身份认证,认证流程如下:
(1) 客户端向服务器发出一个验证请求。
(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
(3) 客户端将收到的随机数结合本地的密码,通过双方约定一致的算法进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。
以上是理论背景知识,python中的用法如下:
1 import hmac
2 h = hmac.new(b'hi', b'python') #这里的hi是双方随机生成的数据块,相当于额外加的料,python才是真正的核心数据
3 print(h.hexdigest())
4
5 输出:
6 392e75a856ddb4f8203ef82f7f21b391
三、关于加密算法
以上讲述了python中典型的加密算法的使用。实际上加密算法和密码学的理论博大精深,在实际应用中还需要结合各种算法的特点来进行选择,在安全性和计算效率之间取得一个可满足需求的平衡点(如md5的算法安全性堪忧,sha512的输出明显比sha1要复杂得多,另外还有des、3des等算法等等)。
day5-hashlib模块的更多相关文章
- 小白的Python之路 day5 hashlib模块
hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ...
- day5模块学习--hashlib模块
hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- Python学习-day5 常用模块
day5主要是各种常用模块的学习 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 conf ...
- python标准模块(time、datetime及hashlib模块)
一.time,datetime模块 时间相关的操作 import time time.sleep(5) # ==> 停顿多少秒 print(time.time()) # ==> 返回时间戳 ...
- Python 之路 Day5 - 常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- Python hashlib模块 (主要记录md5加密)
python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- 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模块、logging模块
一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...
随机推荐
- 学习笔记のsendRedirect &forward
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很 ...
- Linux学习笔记—vim程序编辑器
vi和vim vim是vi的升级版,支持vi的所有指令 vi的使用 vi分为三种模式:一般模式.编辑模式.命令行模式 一般模式 以vi打开一个文件就直接进入一般模式了,这个模式下可以使用上下左右按键来 ...
- python识别验证码
1.tesseract-ocr安装 tesseract-ocr windows下载地址 http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr- ...
- django联合查询
假设A表的主键aid作为B表的外键,A表有属性name,那么想查询B表中name为abc的元素就可以这样写: B.objects.all().filter(aid__name = 'abc') __真 ...
- 从零到一创建ionic移动app:创建第一个app
新建一个空项目,让它能够在你的虚拟机/手机上跑起来 第一步 新建工程 ionic start myApp blank 一个简单的Web应用我们已经创建完成了,接下来我们就要做一些部署到移动端之前的 ...
- vue2.0过度动画
vue在插入.更新或移除dom时,提供了多种不同方式的应用过度效果. 包括以下工具: 在css过渡和动画中自动应用class. 可以配合使用第三方css动画库,如animate.css 在过渡钩子函数 ...
- 正式学习React(四) ----Redux源码分析
今天看了下Redux的源码,竟然出奇的简单,好吧.简单翻译做下笔记: 喜欢的同学自己可以去github上看:点这里 createStore.js import isPlainObject from ' ...
- QMap的使用
1.定义 mapQMap<QString,QColor> map; 2.插入数据 map.insert("AA",RGB(255,0,0)); map.insert(& ...
- 解析Linux系统的平均负载概念
一.什么是系统平均负载(Load average)? 在Linux系统中,uptime.w.top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为 ...
- [CF489D]Unbearable Controversy of Being
题目大意:求有向图中这种图的数量 从分层图来考虑,这是一个层数为3的图 枚举第一个点能到达的所有点,对他们进行BFS求第三层的点(假装它是BFS其实直接枚举效果一样) 代码: #include< ...