【Python 标准库学习】安全哈希与摘要算法库 — hashlib
欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/
hashlib 模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。提供了常见的摘要算法,如MD5,SHA1等等。
摘要算法又称哈希算法、散列算法,摘要算法是单向加密的,也就是说明文通过摘要算法加密之后,是不能解密的。摘要算法的第二个特点密文是固定长度的,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。之所以叫摘要算法,它的算法就是提取明文重要的特征。所以,两个不同的明文,使用了摘要算法之后,有可能出现他们的密文的一样,不过这个概率非常的低。
hashlib 模块官方文档:https://docs.python.org/3/library/hashlib.html
部分常用函数:
hashlib.new(name[, data]):指定算法,创建一个 hashable 对象
hash.update(data):传递类字节参数(通常是bytes)来更新hash对象,重复的调用相当于一个连接了所有参数的调用:
m.update(a)
;m.update(b)
相当于m.update(a+b)
。hash.digest():返回摘要,作为二进制数据字符串值
hash.hexdigest():返回摘要,作为十六进制数据字符串值
MD5 算法示例
MD5 是常见的摘要算法,而单纯的 MD5 加密并不安全,通过撞库的方式,常见密码的 MD5 值很容易就能查询得到。
使用 hashlib.new()
方法来创建一个 hash 对象:
>>> import hashlib
>>> md5 = hashlib.new('md5', 'I love python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'
也可以使用提供的接口指定具体调用方式:
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update('I love python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'
数据量很大时,可以分块多次调用 update()
,最后计算的结果是一样的:
>>> import hashlib
>>> md5 = hashlib.md5()
>>> md5.update('I love '.encode('utf-8'))
>>> md5.update('python!'.encode('utf-8'))
>>> md5.hexdigest()
'21169ee3acd4a24e1fcb4322cfd9a2b8'
SHA1 算法示例
SHA1 是比 MD5 更安全一点的摘要算法,MD5 的密文是 32 位,而 SHA1 是 40 位,SHA1 的升级版还有 SHA256 和 SHA512,版本越强,密文越长,代价是速度越慢。
>>> import hashlib
>>> sha1 = hashlib.new('sha1', 'I love python!'.encode('utf-8'))
>>> sha1.hexdigest()
'23c02b203bd2e2ca19da911f1d270a06d86719fb'
或者:
>>> import hashlib
>>> sha1 = hashlib.sha1()
>>> sha1.update('I love python!'.encode('utf-8'))
>>> sha1.hexdigest()
'23c02b203bd2e2ca19da911f1d270a06d86719fb'
hash.digest() 转化为 hash.hexdigest()
以 MD5 算法为例,首先使用两种方法获取一下字符串 Hello World
的 MD5 值:
>>> import hashlib
>>> md5 = hashlib.new('md5', b'Hello World')
>>> md5.hexdigest()
'b10a8db164e0754105b7a99be72e3fe5'
>>> md5.digest()
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
使用 binascii 模块的 hexlify()
方法将 md5.digest()
转化为 md5.hexdigest()
结果:
>>> import binascii
>>> md5_hexdigest = binascii.hexlify(b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5')
>>> md5_hexdigest
b'b10a8db164e0754105b7a99be72e3fe5'
hash.hexdigest() 转化为 hash.digest()
使用 binascii 模块的 unhexlify()
方法将 md5.hexdigest()
转化为 md5.digest()
结果:
>>> import binascii
>>> md5_digest = binascii.unhexlify('b10a8db164e0754105b7a99be72e3fe5')
>>> md5_digest
b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'
【Python 标准库学习】安全哈希与摘要算法库 — hashlib相关推荐
- Python网络爬虫学习笔记(二)基本库的使用
基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...
- 【Python 标准库学习】日期和时间处理库 — datetime
欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ datetime 模块提供了可以通过多种方式操作日期和时间的类.在支持日期时间数学 ...
- 深度学习常用python库学习笔记
深度学习常用python库学习笔记 常用的4个库 一.Numpy库 1.数组的创建 (1)np.array() (2)np.zeros() (3)np.ones() (4)np.empty() (5) ...
- POCO C++库学习和分析 -- 序
POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...
- POCO C++库学习和分析
POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...
- Sophus线性代数库学习大全
目录 1.Sophus安装方式 2.Sophus库简介 2.1 Sophus库简介 2.2 Eigen库简介 3.Sophus的使用教程 3.1 Sophus库头文件 3.2 CMakeLists.t ...
- python标准库学习笔记
原创:python标准库学习笔记 数据结构 bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法. struct - 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进 ...
- 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
- 如何系统的自学python 知乎-应该怎样系统的学习Python标准库?
先放个牛逼的学习资料:Python 3 Module of the Week,中文名<每周一个 Python 3 模块>.作者几乎实践了一遍全部标准库,并为每一个 API 补充了一段代码示 ...
最新文章
- 黎曼曲面Riemann Surface
- 仿苹果的导航,有点凹陷的感觉
- CentOS7安装cuda及GPU驱动--基于runfile文件
- 一个页面从输入URL到加载显示完成,发生了什么?
- Django 模板实现(动态)图片/头像展示到页面
- 使用vrep给某个模型加dummy的一点小经验
- 工资低是浪费生命?俞敏洪:当你工资比同学少一半 生命已经浪费一半
- 内核参数 linux dd,Linux dd 命令详解(测磁盘的吞吐量)
- 算法笔记_083:蓝桥杯练习 合并石子(Java)
- 本周大新闻|传苹果MR明年Q1量产,五部委发布VR行业应用行动计划
- matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
- 全方位解读数字转型在企业产业变革中发挥的作用!
- 未认证公众号接入公众号支付
- 以太网与 TCP/IP
- 什么是cat.1和cat.4
- 【Unity】Mesh网格编程(四)麦比乌斯环
- python输入多个整数 输入quit表示结束_Python Selenium 之关闭窗口close与quit的方法
- Solr 7 - 中文分词、数据导入、查询 基本使用篇
- 《改变世界的机器》作者丹尼尔·T·琼斯获 ILSSI 终身成就奖
- 【BAT-表姐御用05ren命令批量修改后缀】
热门文章
- 关于使用Transaction对于非数据库事务的操作
- Jquery通过遍历数组给checkbox赋默认值
- [Leetcode][第96题][JAVA][不同的二叉搜索树][动态规划][数学]
- oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
- python自动化框架测试实操_自动化框架之 python+selenium+pytest
- java 窗口 单例_java单例模式实现面板切换
- mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?
- 843. n-皇后问题
- H5 使用微信开放标签跳转小程序
- 图片自动翻转css代码,用css实现图片翻转(示例代码)