Python3学习笔记之-常用内建模块(hashlib、hmac)

本文介绍了Python3内置的hashlib模块,包括SHA和MD5等摘要算法的使用,强调了哈希算法在用户密码存储中的安全应用。同时,详细阐述了基于密钥的消息验证(HMAC)的原理和方法,以及其在数据完整性验证中的作用。通过实例展示了如何使用hmac.new进行安全的密钥比较。
摘要由CSDN通过智能技术生成

Python3学习笔记之-常用内建模块(hashlib、hmac)


目录

Python3学习笔记之-常用内建模块(hashlib、hmac)

一、摘要算法简介(hashlib)

1、哈希算法

 2、属性方法

3、shake可变长度摘要

二、摘要算法应用

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

1、方法

2、属性

3、辅助函数


一、摘要算法简介(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:

usernamepassword
michaele10adc3949ba59abbe56e057f20f883e
bob878ef96e86145580c38c87f0410ad153
alice99b1c2188db85afee403b1536010c2c9

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

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

hmac.new(keymsg=Nonedigestmod='')

返回一个新的 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(ab)

返回 a == b。 此函数使用一种经专门设计的方式通过避免基于内容的短路行为来防止定时分析,使得它适合处理密码。 a 和 b 必须为相同的类型:或者是 str

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小先生

知识是无价的,白嫖也可以的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值