欢迎加入 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相关推荐

  1. Python网络爬虫学习笔记(二)基本库的使用

    基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...

  2. 【Python 标准库学习】日期和时间处理库 — datetime

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ datetime 模块提供了可以通过多种方式操作日期和时间的类.在支持日期时间数学 ...

  3. 深度学习常用python库学习笔记

    深度学习常用python库学习笔记 常用的4个库 一.Numpy库 1.数组的创建 (1)np.array() (2)np.zeros() (3)np.ones() (4)np.empty() (5) ...

  4. POCO C++库学习和分析 -- 序

    POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...

  5. POCO C++库学习和分析

    POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集.同一般的C++库相比,POCO的特点是提供了整一个应用框架.如果要做C++程序应用框架的快速开发,我觉得 ...

  6. Sophus线性代数库学习大全

    目录 1.Sophus安装方式 2.Sophus库简介 2.1 Sophus库简介 2.2 Eigen库简介 3.Sophus的使用教程 3.1 Sophus库头文件 3.2 CMakeLists.t ...

  7. python标准库学习笔记

    原创:python标准库学习笔记 数据结构 bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法. struct - 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进 ...

  8. 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  9. 如何系统的自学python 知乎-应该怎样系统的学习Python标准库?

    先放个牛逼的学习资料:Python 3 Module of the Week,中文名<每周一个 Python 3 模块>.作者几乎实践了一遍全部标准库,并为每一个 API 补充了一段代码示 ...

最新文章

  1. 黎曼曲面Riemann Surface
  2. 仿苹果的导航,有点凹陷的感觉
  3. CentOS7安装cuda及GPU驱动--基于runfile文件
  4. 一个页面从输入URL到加载显示完成,发生了什么?
  5. Django 模板实现(动态)图片/头像展示到页面
  6. 使用vrep给某个模型加dummy的一点小经验
  7. 工资低是浪费生命?俞敏洪:当你工资比同学少一半 生命已经浪费一半
  8. 内核参数 linux dd,Linux dd 命令详解(测磁盘的吞吐量)
  9. 算法笔记_083:蓝桥杯练习 合并石子(Java)
  10. 本周大新闻|传苹果MR明年Q1量产,五部委发布VR行业应用行动计划
  11. matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
  12. 全方位解读数字转型在企业产业变革中发挥的作用!
  13. 未认证公众号接入公众号支付
  14. 以太网与 TCP/IP
  15. 什么是cat.1和cat.4
  16. 【Unity】Mesh网格编程(四)麦比乌斯环
  17. python输入多个整数 输入quit表示结束_Python Selenium 之关闭窗口close与quit的方法
  18. Solr 7 - 中文分词、数据导入、查询 基本使用篇
  19. 《改变世界的机器》作者丹尼尔·T·琼斯获 ILSSI 终身成就奖
  20. 【BAT-表姐御用05ren命令批量修改后缀】

热门文章

  1. 关于使用Transaction对于非数据库事务的操作
  2. Jquery通过遍历数组给checkbox赋默认值
  3. [Leetcode][第96题][JAVA][不同的二叉搜索树][动态规划][数学]
  4. oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
  5. python自动化框架测试实操_自动化框架之 python+selenium+pytest
  6. java 窗口 单例_java单例模式实现面板切换
  7. mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?
  8. 843. n-皇后问题
  9. H5 使用微信开放标签跳转小程序
  10. 图片自动翻转css代码,用css实现图片翻转(示例代码)