使用 Python (hashlib) 实现安全哈希和消息摘要

pythonserver side programmingprogramming更新于 2024/1/12 9:16:00

联邦信息处理标准 (FIPS) 定义了安全哈希算法 SHA1、SHA224、SHA256、SHA384 和 SHA512。RSA 由 Rivest、Shamir 和 Adleman 姓氏首字母组成的首字母缩写,定义了 MD5 算法。较旧的算法称为消息摘要。现代术语是安全哈希。

hashlib 模块用于实现以下算法。

  • md5
  • sha1
  • sha224
  • sha256
  • sha384
  • sha512

hashlib.new(name[, data])

是一个通用构造函数,它将所需算法的字符串名称作为其第一个参数。它还存在以允许访问上面列出的哈希以及您的 OpenSSL 库可能提供的任何其他算法。命名构造函数比 new() 快得多,应该是首选。

>>> hash = hashlib.new('md5',b'hello')
>>> hash.hexdigest()
'5d41402abc4b2a76b9719d911017c592'
>>> import hashlib

使用单独命名的构造函数

>>> msg = hashlib.sha256()
>>> msg.update(b'简单胜于复杂')
>>> msg.digest()
b'\xabz\xd8C(n\xb3\x8b\xf6\x0c\x0e\xf2\x81z\xd7\xf93\x835\xb2\xa1\x9cM\xb1S\x1f\xf7\xf9\x1av-F'
>>> msg.block_size
64
>>> msg.hexdigest()
'ab7ad843286eb38bf60c0ef2817ad7f9338335b2a19c4db1531ff7f91a762d46'
>>> msg = hashlib.md5()
>>> msg.update(b'简单胜于复杂')
>>> msg.hexdigest()
'fd34bb8fafd17f1a21d7bb6e38c8dc68'

哈希对象具有以下方法 −

update()
使用字节类对象更新哈希对象。m.update(a); m.update(b) 等同于 m.update(a+b)。
digest()
返回迄今为止传递给 update() 方法的数据的摘要。
hexdigest()
返回摘要作为双倍长度的字符串对象,仅包含十六进制数字。
copy()
返回哈希对象的副本。这可用于计算共享公共初始子字符串的数据摘要。

Hashlib 提供以下属性 −

algorithms_guaranteed
包含保证此模块在所有平台上支持的哈希算法名称的集合。
algorithms_available
包含正在运行的 Python 解释器中可用的哈希算法名称的集合。
digest_size
结果哈希的大小字节。
block_size
哈希算法的内部块大小(以字节为单位)。
name
此哈希的规范名称,始终小写,并且始终适合作为 new() 的参数来创建此类型的另一个哈希。

shake_128() 和 shake_256() 算法提供可变长度摘要,length_in_bits//2 最高可达 128 或 256 位安全性。

BLAKE2 是 RFC 7693 中定义的加密哈希函数,有两种形式 −

  • BLAKE2b,针对 64 位平台进行了优化,可生成 1 到 64 字节之间任意大小的摘要,
  • BLAKE2s,针对8 到 32 位平台,并生成 1 到 32 字节之间任意大小的摘要。

相关文章