hashlib加密模块
hash音译为“哈希”,是一种散列摘要算法。即把任意长度字符串通过某种散列算法,输出成固定长度的另一个散列值,也称为摘要值。
输出的字符串越长,算法复杂度越高,需要占用的计算资源也越多,破解难度越大,相应的安全程序也就越高。
hashlib模块提供的加密方式有md5,sha系列(sha1,sha224,sha256,sha384,sha512,sha3_224,sha3_256,sha3_384,sha3_512),shake系列(shake_128,shake_256),blake2b,blake2s 。
MD5是最常见的摘要算法,速度很快,生成结果是固定的16字节,通常用一个32位的16进制字符串表示。
SHA1算法更安全点,它的结果是20字节长度,通常用一个40位的16进制字符串表示。而比SHA1更安全的算法是SHA256和SHA512等等,不过越安全的算法越慢,并且摘要长度更长。
使用方法:
1、调用加密方式,生成调用对象
hash = ‘abc'
md5obj = hashlib.md5(hash.encoding='utf-8')
2、将明文数据传递给算法对象(update方法只能接受bytes类型数据)
md5obj.update(b'abcdefg1234567890')
也可以分多次传递,只要数据一致,不影响最后结果:
md5obj.update(b'abc')
md5obj.update(b'defb12')
md5obj.update(b'34567890')
3、获取加密后的结果:没有规律的散列值
res = md5obj.hexdigest()
print(res)
运用:
密码加盐:
md5算法曾广泛用于网站的用户密码加密,网站前端把密码加密后传递给后端,与数据库中保存的密文比较,校验用户密码的正确性。后来出现了md5值的查询网站,可以在上面根据md5值返查到未加密的明文,因此为了密码的安全性,有些网站开始给密码加盐。
加盐的方式有两种:固定加盐、动态加盐。
固定加盐:在前端给明文加密前,先给明文拼接上一个固定的字符串,然后加密后发送给后端。这种加盐方式把盐放在了网页上,一般都可以找到。
动态加盐:使用用户名、时间等有一定规律,但是内容又不一样的字符串拼接到密码上,再进行加密。这种方式增加了盐的查找难度,提高了密码安全性。 更复杂的做法,可以在前端把密码加密,后端给收到的密码加盐后使用另一种算法加密,这样就此增加了猜解和撞库的难度,更大程度的提高了安全性,另一方面,这种方法也增加了服务器的资源占用。
检验文件一致性:
只有完全相同的原文,参加算法的计算后输出才会相同。利用这一特点,hash算法常被用来检验文件的一致性。
当文件较小时,可以把文件全文输入。当文件较大小,则可以按一定规则截取文件的某些部分作为输入进行运算。比如把一个文件分成N段,分段取M个字节,拼接后作为输入进行计算:使用f.seek()移动一定字节数,使用f.read()读取M个字节。
其它运用:断点续传,比特流等。