Python常用内建模块hashlib、hmac详解

 更新时间:2023年08月11日 10:25:47   作者:是小先生  
这篇文章主要介绍了Python常用内建模块hashlib、hmac详解,摘要算法又称哈希算法、散列算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串,需要的朋友可以参考下

一、摘要算法简介(hashlib)

python的hashlib模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。

包括: FIPS 的 SHA1, SHA224, SHA256, SHA384, and SHA512 (定义于 FIPS 180-2) 算法,以及 RSA 的 MD5 算法。

1、哈希算法

每种类型的hash都有一个构造方法,都会返回一个具有相同的简单接口的hash对象。

例如,使用 use  sha256()  创建一个 SHA-256 hash 对象。

你可以使用  update()  方法向这个对象输入字节类对象。

在任何时候你都可以使用  digest()  或  hexdigest()  方法获得到目前为止输入这个对象的拼接数据的 digest。

哈希基于字节,所以updata()不支持输入字符串对象。

 更简要的写法:

 2、属性方法

hash.digest_size

以字节表示的结果哈希对象的大小。

hash.block_size

以字节表示的哈希算法的内部块大小。

hash.update (data)

用 bytes-like object 来更新哈希对象。 重复调用相当于单次调用并传入所有参数的拼接结果:  m.update(a); m.update(b)  等价于  m.update(a+b) 。

注意:为了更好的多线程性能,在对象创建或者更新时,若数据大于2047字节则 Python 的 GIL 会被释放。

hash.digest()

返回当前已传给updata()方法的数据摘要。这是一个大小为digest_size的字节串对象,字节串中可包含0-255的完整取值范围。

hash.hexdigest()

类式于digest()但摘要会以两倍长度字符串对象的形式返回,其中仅包含十六进制数码。这可以被用于在电子邮件或其他非二进制环境中安全地交换数据值,

hash.copy()

返回哈希对象的副本,这可被用来高效地计算共享相同初始子串的数据的摘要。

3、shake可变长度摘要

shake_128()和shake_256()算法提供安全的length_in_bits //2至128或256位可变长度摘要。

为此,它们的摘要需指定一个长度。shake算法不限制最大长度。

二、摘要算法应用

任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢?

方法是存到数据库表中:

namepassword
michael123456
bobabc999
alicealice2008

如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。

此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。

正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5:

namepassword
michaele10adc3949ba59abbe56e057f20f883e
bob878ef96e86145580c38c87f0410ad153
alice99b1c2188db85afee403b1536010c2c9

当用户登录时,首先计算用户输入的明文口令的MD5,然后和数据库存储的MD5对比,如果一致,说明口令输入正确,如果不一致,口令肯定错误。

三、基于秘钥的消息验证(hmac)

hmac. new (key, msg=None, digestmod='')

返回一个新的 hmac 对象。 key 是一个指定密钥的 bytes 或 bytearray 对象。 如果提供了 msg,将会调用  update(msg)  方法。

 digestmod 为 HMAC 对象所用的摘要名称、摘要构造器或模块。

 虽然该参数位置靠后,但它却是必须的。

1、方法

hmac.update(msg)

用msg来更新hmac对象,重复调用相当于单次调用并传入所有参数的拼接结果。

hmac.digest()

返回当前已传给  update()  方法的字节串数据的摘要。 这个字节串数据的长度将与传给构造器的摘要的长度 digest_size 相同。 它可以包含非 ASCII 的字节,包括 NUL 字节。

hmac.hexdigest()

类似digest()但摘要会以两倍长度字符串的形式返回,其中仅包含十六进制数码,这可以被用于在电子邮件或其他非二进制环境中安全地交换数据值。

hmac.copy ()

返回 hmac 对象的副本(“克隆)。 这可被用来高效地计算共享相同初始子串的数据的摘要。

2、属性

HMAC. digest_size

以字节表示的结果 HMAC 摘要的大小。

HMAC. block_size

以字节表示的哈希算法的内部块大小。

3、辅助函数

hmac. compare_digest (a, b)

返回  a == b 。

此函数使用一种经专门设计的方式通过避免基于内容的短路行为来防止定时分析,使得它适合处理密码。

 a 和 b 必须为相同的类型:或者是 str

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

相关文章

  • 10个使用Python必须知道的内置函数

    10个使用Python必须知道的内置函数

    这篇文章小编主要向大家介绍的是10个使用Python必须知道的内置函数reduce()、split()、map()等,更多后置函数请看下文
    2021-09-09
  • 如何在Python函数执行前后增加额外的行为

    如何在Python函数执行前后增加额外的行为

    有的时候会需要在函数前后添点额外的功能(比如过滤、计时等)时,以前总是首先想到装饰器。最近学习了Python的上下文管理器,所以本文就给大家介绍了如何在Python函数执行前后增加额外的行为,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10
  • Python中对URL进行编码的操作

    Python中对URL进行编码的操作

    URL编码是一种将非ASCII字符转换为ASCII字符序列的过程,以便在网络上传输URL时保持它们的有效性和兼容性,在Python中,我们可以使用内置的urllib.parse模块来进行URL编码,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 如何一键理清大型Python项目依赖树

    如何一键理清大型Python项目依赖树

    这篇文章主要介绍了如何一键理清大型Python项目依赖树,文章围绕主题相关资料展开详细的内容介绍,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Python标准库笔记struct模块的使用

    Python标准库笔记struct模块的使用

    这篇文章主要介绍了Python标准库笔记struct模块的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • python pandas的map函数使用

    python pandas的map函数使用

    这篇文章主要介绍了python pandas的map函数使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • python对输出的奇数偶数排序实例代码

    python对输出的奇数偶数排序实例代码

    在本篇内容里小编给大家整理的是一篇关于python对输出的奇数偶数排序实例代码内容,有兴趣的朋友们可以参考下。
    2020-12-12
  • 使用Python实现一键隐藏屏幕并锁定输入

    使用Python实现一键隐藏屏幕并锁定输入

    本文主要介绍了使用 Python 编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己的屏幕被人偷看啦
    2025-04-04
  • python3 实现自定义切片类为左闭右闭详情

    python3 实现自定义切片类为左闭右闭详情

    这篇文章主要介绍了python3 实现自定义切片类为左闭右闭详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2021-12-12
  • 深入详解Python中动态方法调用的各种方法

    深入详解Python中动态方法调用的各种方法

    在Python编程中,我们经常会遇到需要根据​​运行时条件​​动态调用对象方法的场景,本文将深入探讨Python中动态方法调用的各种技术,感兴趣的小伙伴可以了解下
    2025-10-10

最新评论