python常用模块——hashlib模块
Python的hashlib提供了常见的摘要算法,如md5、sha1等
什么是摘要算法了?摘要算法又称哈希算法、散列算法。
它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,可以来核对你想要的数据是否被篡改了。
摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
我们以最常见的md5为例:
import hashlib
md5 = hashlib.md5() #选择摘要算法中的md5类进行实例化,得到md5
md5.update(b"everything is passible") #对一个字符串进行摘要
print(md5.hexdigest()) #找摘要算法要结果
计算结果如下:
a8c816f56c74b68e4d547769531a46d1
如果数据很大,可以分多次调用update()进行摘要,最后计算的结果是一样的:
import hashlib
md5 = hashlib.md5()
md5.update(b"everything")
md5.update(b" is passible")
print(md5.hexdigest())
md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。
另一种常见的摘要算法就是sha1,调用sha1和调用md5完全类似:
import hashlib
sha1 = hashlib.sha1()
sha1.update(b"everything is passible")
print(sha1.hexdigest())
计算结果:
000da64f15dce120bd685b189c3e169a1f67753b
sha1的结果是160bit字节,通常用一个40位的十六进制字符串表示。
比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。
hashlib一般在文件的一致性校验和加密认证这两方面使用的比较多。
由于常用口令的md5值很容易被计算出来,一般我们会添加一些操作,比如“加盐”,就是通过对原始口令加一个复杂字符串来实现。比如:
#前后加了一些特殊字符串,减少了出现的机率。
import hashlib
md5 = hashlib.md5()
md5.update(b"*)_#$%^&everything is passible%^&")
print(md5.hexdigest())
小结:
摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改和客户验证。
python常用模块——hashlib模块的更多相关文章
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- Python常用内建模块
Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...
- python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml
# 2 collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...
- python模块: hashlib模块, configparse模块, logging模块,collections模块
一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...
- python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识
目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...
- python模块——hashlib模块(简单文件摘要算法实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...
- Python 常用内建模块(time ,datetime)
1,在Python中,与时间处理有关的模块就包括:time,datetime以及calendar. 2,在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(st ...
- Python正则表达式与hashlib模块
菜鸟学python第十六天 1.re模块(正则表达式) 什么是正则表达式 正则表达式是一个由特殊字符组成的序列,他能帮助对字符串的某种对应模式进行查找. 在python中,re 模块使其拥有全部的正则 ...
- Python进阶-XVV hashlib模块、configparse模块、logging模块
1.配置相关的configparse模块 配置文件如何组织?python中常见的是将配置文件写成py,然后引入该模块即可.优点是方便访问. 但是也有用类似windows中的ini文件的配置文件,了解即 ...
随机推荐
- iOS的isnan函数
假设一个数是一个确定的数.那它就不是nan值 假设一个数是无穷大,无穷小.那它就是nan值 我试着打印了下面的值是不是nan值 if (isnan(1)) { DLog(@"1是NAN&qu ...
- 12.extern(转)
本文转自:http://blog.csdn.net/xingjiarong/article/details/47656339 利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数 ...
- PHP修改memory_limit的三种办法
PHP修改memory_limit的三种办法 2010-06-11 10:57:11 分类: 可能是分词程序的问题.只要搜索的字段达到十个汉字以上,就会出现诸如以下的错误 Fatal error: ...
- java中static变量的声明和初始化
目录(?)[+] 问题1静态变量如何初始化 问题2JDK如何处理static块 问题3如何看待静态变量的声明 对初始问题的解答 在网上看到了下面的一段代码: public class Test ...
- javascript simple MVC
<h3>javascript simple MVC</h3> <div> <select name="" id="setAnim ...
- error LNK2019: unresolved external symbol 的一个解决方法
在VS2010中使用opencv时,有时会出现如下类似的连接错误: 解决方法:根据头文件手动指定lib文件 #ifdef _DEBUG #pragma comment(lib,"*.lib& ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的alsa音频pcm g711 和aac 音频格式
(1)alsa pcm (2)g711 (3)aac (4) --------------author:pkf -------------------time:2-4 ---------------- ...
- php 加入即时推送功能
打开浏览器保持与服务器握手的websocket 之前用workerman接过很花时间,现在workerman对其代码做了优化->https://www.workerman.net/web-sen ...
- mybatis if test 相等的情况怎样动态拼接sql
今天程序须要依据前台的传过来的状态推断在数据库里是取 where a>b 还是 a<b 还是 a=0 的情况 搞了一下午最后试了下 在if 里面拼接 #{status}=#{statu ...
- CodeIgniter框架——CI中视图路径问题
答: 视图中的所有路径全部和 index.php 同级,也就是和 index.php 属于一个目录下,也就是网站根目录. 因为 index.php 后面看似是路径的东西其实那只是一种 URL 参数而已 ...