12. 密码相关的库
本库主要提供了对加密相关的功能,主要有两个模块:hashlib和hmac。
本模块主要提供了安全的HASH计算和数字签名的算法,比如 SHA1、SHA224、SHA256、SHA512,其实哈希算法有时也叫做签名算法,其实两者是相通的。要想使用本模块里的HASH功能,需要使用相应的构造函数,把对象创建出来,再调用相应的函数,比如使用SHA1算法,就需要先调用构造函数sha1()来创建一个对象,接着调用对象的update()函数,在这个函数里输入要计算的bytes对象,最后通过digest()或hexdigest()函数就可以获取相应的HASH值或摘要。
本模块提供了下面的构造函数:md5()、sha1()、sha224()、sha256()、sha384()、sha512(),要想使用其中任何一个算法,都分别调用对应的构造函数就可以创建对象。
hashlib.new(name[, data])
通过指定算法名称来创建HASH算法对象,也支持创建OpenSSL里提供的算法对象。
例子:
#python 3.4
import hashlib
h = hashlib.new('ripemd160')
h.update(b'http://blog.csdn.net/caimouse')
print(h.hexdigest())
结果输出如下:
a51579611738a51d4f7c0f5272ea57e17a95ed4e
hashlib.algorithms_guaranteed
返回在所有平台支持的HASH算法名称的列表。
hashlib.algorithms_available
返回在Python解释器可以使用的HASH算法名称的列表。
hash.digest_size
返回HASH结果的大小,单位是字节。
hash.block_size
返回hash算法内部使用块的大小,单位是字节。
hash.name
返回hash算法的名称。
hash.update(arg)
根据输入参数arg进行hash值的更新,参数arg是一个bytes对象。连续多次调用本函数,可以对很长的内容进行计算,比如一个10G大小的文件,可以分成每次计算10M的大小的内容,计算N次的方式。
hash.digest()
返回一个bytes表示的摘要结果,就是多次调用HASH算法计算之后的结果。
hash.hexdigest()
本函数跟函数digest()返回的结果一样,只不过本函数是格式化为十六进制字符串的方式返回。
hash.copy()
返回一个hash的对象拷贝,可以加速公共部分的计算,比如前面10M内容相同,就可以只使用一个对象计算前面10M内容,然后再拷贝多个对象出来计算后面不相同内容部分。
hashlib.pbkdf2_hmac(name, password, salt, rounds, dklen=None)
本函数提供了PKCS#5的密码加密计算方法。由于密码一般比较短,如果采用普通的sha1算法直接来计算会很容易受到攻击者破解,因此采用多轮计算方法,以及添加一些固定内容来计算。
参数name是选择HASH算法的名称;参数password是需要计算的密码串,bytes类型;参数salt是用来迭代的字符串,大概长度为16字节左右,bytes类型;参数rounds是进行多少hash计算;参数dklen是返回计算之后键的长度。
例子:
#python 3.4
import hashlib, binascii
dk = hashlib.pbkdf2_hmac('sha256', b'blog.csdn.net', b'caimouse', 100000)
print(binascii.hexlify(dk))
结果输出如下:
b'5f8d95527a486e2ac3635c4d52a1ff3e9d821245b21adf6e9eecc9aa6de1e9a6'
使用hash的例子:
#python 3.4
import hashlib
md5 = hashlib.md5()
md5.update(b'http://blog.csdn.net/caimouse')
print(md5.hexdigest())
结果输出如下:
3a602b3b31be1b78da801b1d3ec85a5b
蔡军生 QQ:9073204 深圳