hashlib
hashlib 是 Python 提供的多种不同散列操作的通用接口。包括了 SHA1
、SHA2
系列的 SHA224 SHA256 SHA384 SHA512
、SHA3
系列以及 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() 但以两倍长度字符串对象的形式返回(其中仅仅包含十六进制数码) |