hashlib模块实现了多种不同安全哈希和消息摘要算法的通用接口。包括FIPS安全哈希算法SHA1、SHA224、SHA256、SHA384和SHA512。
1节:字符串的MD5哈希
hashlib模块实现了多种不同安全哈希和消息摘要算法的通用接口。包括FIPS安全哈希算法SHA1、SHA224、SHA256、SHA384和SHA512(定义于FIPS 180-2),以及RSA的MD5算法(定义于Internet RFC 1321)。
模块中为每种哈希类型都提供了一个构造函数。例如,使用sha1()可以创建一个SHA1哈希对象。
hash.sha1()
模块中始终存在的哈希算法的构造函数有md5()、sha1()、sha224()、sha256()、sha384()和sha512()。
你可以使用update()方法向哈希对象中添加任意字符串。在任何时候,你都可以使用digest()或hexdigest()方法获取到目前为止添加到哈希对象中的字符串连接的摘要。
hash.update(arg)
使用字符串arg更新哈希对象。多次调用等同于将所有参数连接后进行一次调用:m.update(a);m.update(b)等同于m.update(a+b)。
hash.digest()
返回到目前为止传递给update()方法的字符串的摘要。这是一个长度为digest_size字节的字符串,可能包含非ASCII字符,包括空字节。
hash.hexdigest()
与digest()类似,但摘要以双倍长度的字符串形式返回,只包含十六进制数字。这可以用于在电子邮件或其他非二进制环境中安全地交换值。
以下是一个示例:
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects".encode("utf-8"))
>>> m.update(" the spammish repetition".encode("utf-8"))
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
>>> m.hexdigest()
'bb649c83dd1ea5c9d9dec9a18df0ffe9'
>>> m.digest_size
16
>>> m.block_size
64
或者:
hashlib.md5("Nobody inspects the spammish repetition".encode("utf-8")).hexdigest()
'bb649c83dd1ea5c9d9dec9a18df0ffe9'
2: 由OpenSSL提供的算法
hashlib模块还提供了一个通用的new()构造函数,它接受一个字符串参数,表示所需的算法名称。这允许访问上述列出的哈希算法,以及你的OpenSSL库可能提供的其他算法。与new()相比,使用命名构造函数的速度更快,应优先使用。
使用由OpenSSL提供的算法的new():
>>> h = hashlib.new('ripemd160')
>>> h.update("Nobody inspects the spammish repetition".encode("utf-8"))
>>> h.hexdigest()
'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
Tags:消息摘要算法