当前位置: 首页 > 工具软件 > hashlib++ > 使用案例 >

Python哈希算法模块hashlib

杭曦
2023-12-01

初步

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表示以二进制字符串作为密钥进行哈希,digesthexdigest分别表示将生成的哈希码通过二进制和十六进制的形式表现出来。

封装算法简介

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

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

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

shake_128shake_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 哈希算法名字
 类似资料: