12.1 hashlib--安全的哈希计算和签名库

12. 密码相关的库

本库主要提供了对加密相关的功能,主要有两个模块:hashlibhmac

12.1 hashlib--安全的哈希计算和签名库

本模块主要提供了安全的HASH计算和数字签名的算法,比如 SHA1SHA224SHA256SHA512,其实哈希算法有时也叫做签名算法,其实两者是相通的。要想使用本模块里的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  深圳

你可能感兴趣的:(加密,算法,python,hash,SHA1)