Python中的哈希算法模块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'}
整理如下
构造器 | 算法 |
md5 | md5 |
sha家族 | sha1, sha224, sha256, sha384, sha512 |
sha3家族 | sha3_224, sha3_256, sha3_384, sha3_512, |
BLAKE2 | blake2b, blake2s |
shake | shake_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模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!