[ ]
宙飒天下网 1. 摘要算法
摘要算法是将信息压缩提取以作为数据指纹的算法,我们下载东西要确认下的东西有没有下错下漏常用这种算法来做验证,在密码学中这是很多算法的基础
具体摘要算法是怎么样的?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)
还有一种应用场景是用来存储用户的密码,大家都知道明文密码存储在数据库里很不安全,之前爆出很多知名网站将用户密码以明文存储,导致信息泄露.可以通过摘要算法给密码加个密存储进去.这样要破解密码除了要知道密码本身,还得知道生成最终摘要文本的算法才可以.也就相对安全多了.
有没有可能两个不同的数据通过某个摘要算法得到了相同的摘要?完全有可能,因为任何摘要算法都是把无限多的数据集合映射到一个有限的集合中。这种情况称为碰撞,比如Bob试图根据你的摘要反推出一篇文章'how to learn hashlib in python - by Bob',并且这篇文章的摘要恰好和你的文章完全一致,这种情况也并非不可能出现,但是非常非常困难。
1.1. hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
import hashlib
psw="haolaoshixihuandadota2"
md5 = hashlib.md5() #初始化摘要对象
md5.update(psw.encode('utf-8')) #使用md5算法计算这段摘要 print(md5.hexdigest())#输出16进制字符串
acc5d43185d33c88def863ac18704561
sha1 = hashlib.sha1()
sha1.update(psw.encode("utf-8")) print(sha1.hexdigest())
e53754d171a425b1dbb4a215cd86d568050055c5
一样的操作,只是时间花费不同而已
sha224 = hashlib.sha224()
sha224.update(psw.encode("utf-8")) print(sha224.hexdigest())
psw="haolaoshixihuandadota2"
0
1.1.4. 长字符串操作
长字符串或者一个分段的字符串要作摘要可以分段的进行update,结果是一样的
psw="haolaoshixihuandadota2"
1
psw="haolaoshixihuandadota2"
2
1.2. hmac
和hashlib中的算法不同,hmac算法需要一个key作为seed才可以得到散列点.这样的好处是黑客除了要知道密码,算法,还得知道这个key才能够攻破密码,我们完全可以为不同时间注册的用户使用不同的key,这样破解的难度就更大了
具体用法如下:
psw="haolaoshixihuandadota2"
3
psw="haolaoshixihuandadota2"
4
psw="haolaoshixihuandadota2"
5
1.2.1. 参数
hamc的new方法可以带参数
psw="haolaoshixihuandadota2"
6
- key 秘钥
- msg 需要散列的信息
- digestmod 摘要算法,默认为md5,可以是任何hashlib中的算法
还没有评论,来说两句吧...