python加密---hashlib模块

1.hash是什么

hash是一种算法,支持openssl 库提供的所有算法,包括md5, sha1, sha224, sha256, sha384, sha512,使用非常简单、方便。md5经常用来做用户密码的存储。而sha1则经常用作数字签名。

2.md5的三个特点

(1).内容相同则hash运算结果相同,内容稍微 改变hash值则变,

(2).不可逆推。

(3).在用相同算法计算时,无论数据多长,得到的hash值长度固定

3.具体用法

import hashlib
m=hashlib.md5()   #获得一个MD5对象
m.update('hello'.encode('utf-8'))  #将字符串'hello'更新到上面的MD5对象中,注意字符串要是 bytes类型 所有需要encode转换一下
m.update('world'.encode('utf-8'))  # 继续将字符串'world'更新到MD5对象中.
print(m.hexdigest())  #打印加密后的字符串  #fc5e038d38a57032085441e7fe7010b0 


#--------------------
m=hashlib.md5()
m.update('helloworld'.encode('utf-8'))  #跟上述方式计算出的MD5值一样。
print(m.hexdigest())  #fc5e038d38a57032085441e7fe7010b0

 

计算文件的MD5

m=hashlib.md5()
with open('a.xml','rb') as f:  #要以rb模式打开文件
    for line in f:
        m.update(line)    
print(m.hexdigest())

 

4.上诉加密方式依然存在缺陷。

  因为通过撞库的方式依然可以将反解出来。比如,提前转换n多种密码的随机组合,算出MD5值后 与真实密码的MD5值比较,如果一致,就得到正确的密码了。

  可以通过向加密算法中添加自定义key来加密,也成为”加盐”。

import hashlib
password='123456'
m=hashlib.md5('tianwanggaidihu'.encode('utf-8'))  #先自己加上一段内容
m.update(password.encode('utf-8'))  #然后在把真实密码update到对象中。

passwd_md5=m.hexdigest()  #最后算出的md5值就是 自己加上的内容+真实密码的MD5值

 

posted @ 2017-08-20 10:05  嘟囔囔小孩  阅读(160)  评论(0编辑  收藏  举报