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个字节。

 

其它运用:断点续传,比特流等。