From Python 3.4.2 documentation

hashlib模块是提供多种安全哈希算法和信息摘要算法的通用接口。包括FIPS(联邦信息处理标准Federal Information Processing Standard)安全哈希算法SHA1, SHA224, SHA256, SHA384, SHA512。

概念

MD5

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。

具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。

SHA1

SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,

它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

Hash算法

针对每个类型的hash都会命名一个构造函数,每个构造函数都会用同一个简单的接口返回一个hash对象。如使用sha1()创建一个SHA1的hash对象,然后用用update()方法来更新这个bytes-like 对象(通常是bytes)。任何时候都一个连接digest()或者hexdigest()方法来呈现这个对象存储的数据。

为优化多线程性能,python GIL(全局解锁器)在创建或者update对象的是释放的数据大于2047字节

update()方法不支持Unicode-objects,只支持bytes对象,可以用b''对Unicode-objects进行解码,如图所示:

py-hashlib-update.png

目前常用的构造函数包括md5(), sha1(), sha224(), sha256(), sha384(), sha512()。附加的算法需要你python运行的平台的OpenSSL库的支持。

example1,获得字节字符串b'www.qiezivip.com'的摘要:

>>> import hashlib
>>> m = hashlib.md5()    #实例化一个md5对象
>>> m.update(b'www.qiezivip.com')    #更新对象
>>> m.digest()    #获取这个对象的加密后的二进制数据
b3\x99\xa1\x98\xbdv\xae'g\x141\xaa\x92\xbd\xdez
>>> m.digest_size
16
>>> m.block_size
64
>>> m.hexdigest()    #十六进制的数据
'3399a198bd76ae27671431aa92bdde7a'


精简的写法:

>>> hashlib.md5(b'www.qiezivip.com').hexdigest()
'3399a198bd76ae27671431aa92bdde7a'
>>>