python常用模块——hashlib模块

Python的hashlib提供了常见的摘要算法,如md5、sha1等

什么是摘要算法了?摘要算法又称哈希算法、散列算法。

它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,可以来核对你想要的数据是否被篡改了。

摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。

而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

我们以最常见的md5为例:

import hashlib
md5 = hashlib.md5()   #选择摘要算法中的md5类进行实例化,得到md5
md5.update(b"everything is passible")   #对一个字符串进行摘要
print(md5.hexdigest())   #找摘要算法要结果

计算结果如下:

a8c816f56c74b68e4d547769531a46d1

如果数据很大,可以分多次调用update()进行摘要,最后计算的结果是一样的:

import hashlib
md5 = hashlib.md5()
md5.update(b"everything")
md5.update(b" is passible")
print(md5.hexdigest())

md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。

另一种常见的摘要算法就是sha1,调用sha1和调用md5完全类似:

import hashlib
sha1 = hashlib.sha1()
sha1.update(b"everything is passible")
print(sha1.hexdigest())

计算结果:

000da64f15dce120bd685b189c3e169a1f67753b

sha1的结果是160bit字节,通常用一个40位的十六进制字符串表示。

比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。

hashlib一般在文件的一致性校验和加密认证这两方面使用的比较多。

由于常用口令的md5值很容易被计算出来,一般我们会添加一些操作,比如“加盐”,就是通过对原始口令加一个复杂字符串来实现。比如:

#前后加了一些特殊字符串,减少了出现的机率。
import hashlib
md5 = hashlib.md5()
md5.update(b"*)_#$%^&everything is passible%^&")
print(md5.hexdigest())

 

小结:

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改和客户验证。

posted @ 2017-11-26 03:33  明王不动心  阅读(173)  评论(0编辑  收藏  举报