Python标准库提供了计算数据Hash的功能,支持许多不同的算法,常见的MD5, SHA1, SHA256, HMAC均在其中。
MD5, SHA1, SHA256在hashlib模块中,HMAC在hmac模块中,但均有一样的接口。
通用的使用模式为:
- 构造所需算法的Hash对象
- 通过
update
方法填入消息数据 - 调用
digest
或hexdigest
获取结果
两个模块中均存在new
方法用于创建Hash对象,hashlib中还存在和算法同名的构造方法如md5
,sha1
可直接创建Hash对象,直接通过算法名构造Hash对象速度要优于new
。
import hashlib
m = hashlib.sha256()
# or m = hashlib.new('sha256')
m.update(b"Nobody inspects")
m.update(b" the spammish repetition")
m.digest()
m.hexdigest()
digest
和hexdigest
可以在任何需要的时候调用,此时所有构造器和update
传入的数据会被按先后顺序合并连接后计算。
import hashlib
md5 = hashlib.md5(b'hello')
md5.update(b' world')
md5.hexdigest() # '5eb63bbbe01eeed093cb22bb8f5acdc3'
等价于
hashlib.md5(b'hello world') .hexdigest() # '5eb63bbbe01eeed093cb22bb8f5acdc3'
和Python的强调“明确”的设计理念一样,传到Hash对象的数据需要是“字节”,而非“字符串”,因为Hash操作本身的操作对象就是字节。
这套API形式在其它语言中的Hash相关库也可找到影子,比如nodejs中的API就与此很类似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)