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值