MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

python散装笔记——168: hashlib

2025-03-13 15:59 huorong 精选文章 2 ℃ 0 评论

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:消息摘要算法

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言