Skip to content

hashlib

hashlib 是 Python 提供的多种不同散列操作的通用接口。包括了 SHA1SHA2 系列的 SHA224 SHA256 SHA384 SHA512SHA3 系列以及 MD5 算法。

Tips

散列还有几个术语: 安全哈希、消息摘要。

用法

每种类型的 hash 算法都存在一个构造器方法,他们会返回一个具有相同接口的哈希对象。哈希对象中存在一个 update 方法他接受一个 bytes 对象,之后可以使用 digest 和 hexdigest 方法获得目前为止 update 到哈希对象的数据的 digest。

Python
import hashlib
m = hashlib.sha256()
m.update(b"Nobody inspects")
m.update(b" the spammish repetition")
m.digest()
#b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
m.hexdigest()
#'031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'

## 简写方法
hashlib.sha256(b"Nobody inspects the spammish repetition").hexdigest()

还有一个构造器方法 new,其中可以包含任意 openssl 支持的 hash 方法:

Python
## 构造器方法
h = hashlib.new('sha256')
h.update(b"Nobody inspects the spammish repetition")
h.hexdigest()
#'031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'

哈希对象

所有类型的哈希对象都具有以下成员:

成员 说明
digest_size 以字节表示的结果哈希对象的大小
block_size 以字节表示的哈希算法的内部块大小
name 哈希对象的规范名称
update(data) 用 bytes 来更新哈希对象,重复调用相当于拼接 data
digest() 返回当前已传给 update 方法的数据摘要,这是一个大小为 digest_size 的字节串对象(0~255)
hexdigest() 类似 digest() 但以两倍长度字符串对象的形式返回(其中仅仅包含十六进制数码)