hashlib是个专门提供hash算法的库,其支持openssl 库提供的所有算法,包括md5, sha1, sha224, sha256, sha384, sha512,使用非常简单、方便。md5经常用来做用户密码的存储。而sha1则经常用作数字签名。
他们的使用模式都是一样的,所以我这里只介绍md5的加解密
- 使用
hashlib.md5()
可以创建一个md5对象 ( 也可以使用hashlib.new(‘md5’[, data]) )
import hashlib text = "halib真好用!" m = hashlib.new("md5", text.encode('gbk')) print(m.hexdigest()) # c6380f31122e5b9ccf60421e3c79b589
使用MD5对象.uptate(data)
可以添加加密的文本(该文本需要经过编码,企且编码不同可能会造成得到hash值不同),注意多次使用uptate()表示将data叠加,而不是覆盖,比如:m.uptate(a)和m.uptate(b) 等价于 m.update(a+b)
import hashlib text1 = "hashlib" text2 = "真好用!" m = hashlib.md5() m.update(text1.encode('utf-8')) m.update(text2.encode('utf-8')) print(m.hexdigest()) # c6380f31122e5b9ccf60421e3c79b589
- 使用
md5对象.hexdigest()
得到hash值
import hashlib text = "hashlib真好用!" m = hashlib.md5() m.update(text.encode('utf-8')) print(m.hexdigest()) # c6380f31122e5b9ccf60421e3c79b589
加盐:额外给原始数据添加一点自定义的数据,使得生成的消息摘要不同于普通方式计算的摘要。
比如我下面给密码字符串“password”加上字符串“salt”,这里的“salt”字符串就是所谓的盐,其摘要值必然不等于正常摘要“password”字符串的值。当然这个“salt”具体是什么,完全可以自定义,而且不能告诉他人!千万不要以为加盐就是加个“salt”字符串。
import hashlib.md5 md5 = hashlib.md5() s = "我是明文" + "我是盐" md5.update(s.encode('utf-8')) print(md5.hexdigest()) # 'b305cadbb3bce54f3aa59c64fec00dea'
sha1的使用 (用法都一样)
import hashlib text2 = "我在使用sha1加密" print(hashlib.new('sha1', text2.encode("utf-8")).hexdigest()) # fe797d7f4aaf1640781f8ba85e216d11e1db09bd k = hashlib.sha1() k.update(text2.encode("utf-8")) print(k.hexdigest()) # fe797d7f4aaf1640781f8ba85e216d11e1db09bd