Python中的哈希算法模块hashlib详解

 更新时间:2023年08月11日 09:50:22   作者:微小冷  
这篇文章主要介绍了Python中的哈希算法模块hashlib详解,hashlib模块实现了多种哈希算法,包括MD5以及SHA家族的算法,通过algorithms_guaranteed可以查看hashlib中封装的所有算法,需要的朋友可以参考下

hashlib模块

hashlib 模块实现了多种哈希算法,包括MD5以及SHA家族的算法,通过 algorithms_guaranteed 可以查看 hashlib 中封装的所有算法

>>> from pprint import pprint
>>> pprint(hashlib.algorithms_guaranteed)
{'blake2b',
 'blake2s',
 'md5',
 'sha1',
 'sha224',
 'sha256',
 'sha384',
 'sha3_224',
 'sha3_256',
 'sha3_384',
 'sha3_512',
 'sha512',
 'shake_128',
 'shake_256'}

整理如下

构造器算法
md5md5
sha家族sha1, sha224, sha256, sha384, sha512
sha3家族sha3_224, sha3_256, sha3_384, sha3_512,
BLAKE2blake2b, blake2s
shakeshake_128, shake_256

这些哈希算法拥有相同的外部接口,以 md5 为例,调用方式大致为

import hashlib
x = hashlib.md5()
x.update(b"tinycool")
x.hexdigest()
# '90cba0172a608c7d3784ba159e6a9ef1'
x.digest()
# b'\x90\xcb\xa0\x17*`\x8c}7\x84\xba\x15\x9ej\x9e\xf1'

其中, update 表示以二进制字符串作为密钥进行哈希, digest 和 hexdigest 分别表示将生成的哈希码通过二进制和十六进制的形式表现出来。

封装算法简介

md5算法,MD即信息摘要(Message-Digest),md5可以理解为第五代信息摘要算法,于1992年公开,用以取代md4,但在2004年已经被证实无法防止碰撞,从而不适用于安全性认证,但目前来说还是有人在用。

相比之下,SHA,即安全散列算法(Secure Hash Algorithm),是美国政府的加密标准,相对来说更加安全。其中sha1生成160bit长度的信息摘要,其他SHA函数,以sha224为例,224表示产生的信息摘要长度为224bit,以此类推。

blake2b和blake2s分别针对64位操作系统和32位操作系统进行优化,以生成最长64位和最长32位的位数可变的信息摘要。

shake_128和shake_256可生成位数可变的信息摘要,二者的最大位数分别是128和256位。

new函数

通过 new 函数,可以更加统一地生成哈希对象,例如

x = hashlib.new('sha256')
x.update(b"tinycool")
x.hexdigest()
# '96d424d9d77972f28b5a11e8c2bddd67542e7784e01b7dcca51154babb2b54ea'

即 hashlib.new('xxx') 和 hashlib.xxx() 是相同的,当然 xxx 得是 haslib 中封装好的哈希函数。

接下来演示一下 shake_128 函数

x = hashlib.new('shake_128')
x.update(b"tinycool")
x.hexdigest(15)
# '8f8f153833e5159d548f4371af9855'
x.hexdigest(25)
# '8f8f153833e5159d548f4371af9855e0affc9ddae8d6c98bee'

可见,在 hexdigest 中输入不同的长度,返回了不同长度的十六进制字符串。

通过 new 创建的哈希对象,有三个可调用的属性

  • digest_size 哈希对象的字节数。
  • block_size 哈希算法内部块的字节数。
  • name 哈希算法名字

到此这篇关于Python中的哈希算法模块hashlib详解的文章就介绍到这了,更多相关Python中的hashlib模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬虫分析汇总

    Python爬虫分析汇总

    这篇文章主要详细的介绍了Python爬虫的相关资料,需要的朋友可以参考下面文章内容,希望能帮助到你
    2021-09-09
  • python sys模块使用方法介绍

    python sys模块使用方法介绍

    sys模块是最常用的和python解释器交互的模块,sys模块可供访问由解释器(interpreter)使用或维护的变量和与解释器进行交互的函数,需要的朋友可以参考下
    2022-08-08
  • 使用python和yolo方法实现yolo标签自动标注

    使用python和yolo方法实现yolo标签自动标注

    本文介绍了基于YOLOv10的自动标注方法,从初阶的固定标注到高阶的基于YOLO检测结果的自动标注,两者相比,高阶方法显著提高了标注的准确性,并减少了人工操作的时间,</P><P>
    2024-11-11
  • 解决win10 vscode 无法激活python 虚拟环境的问题

    解决win10 vscode 无法激活python 虚拟环境的问题

    这篇文章主要介绍了win10 vscode 无法激活python 虚拟环境的解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • python判定文件目录是否存在及创建多层目录

    python判定文件目录是否存在及创建多层目录

    这篇文章主要介绍了python判定文件目录是否存在及创建多层目录,文章通过os模块、try语句、pathlib模块善终模块展开详细的内容,感兴趣的朋友可以参考一下
    2022-06-06
  • python遗传算法之单/多目标规划问题

    python遗传算法之单/多目标规划问题

    本文主要介绍了python遗传算法之单/多目标规划问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 浅谈Python的文件类型

    浅谈Python的文件类型

    下面小编就为大家带来一篇浅谈Python的文件类型。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • python实现excel读写数据

    python实现excel读写数据

    这篇文章主要为大家详细介绍了python操作EXCEL读数据、写数据的实例源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • python实现批量命名照片

    python实现批量命名照片

    这篇文章主要为大家详细介绍了python实现批量命名照片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 基于Python实现绘制属于你的世界地图

    基于Python实现绘制属于你的世界地图

    Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,绘制地图便是其功能之一。本文我们将用matplot工具包之一的  mpl_toolkits  来绘制世界地图,需要的可以参考一下
    2022-11-11

最新评论