来源:
- https://www.cnblogs.com/UnGeek/archive/2013/03/30/2990876.html
- https://www.cnblogs.com/weiman3389/p/6056305.html
- https://www.cnblogs.com/yyds/p/7072492.html
- 加盐——https://www.zhihu.com/question/20299384
一、基础使用
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import hashlib 2 inp = input('输入:>>') 3 4 #创建一个md5加密对象 5 hash = hashlib.md5() 6 #生成md5加密字符串 7 hash.update(bytes(inp,encoding='utf-8')) 8 #把md5加密好的字符串打印出来 9 print(hash.hexdigest())
- hash.update(data)
- 更新哈希对象所要计算的数据,多次调用为累加效果
- 如 m.update(a) ; m.update(b) 等价于 m.update(a+b)
- hash.hexdigest()
- 返回传递给update()函数的所有数据的摘要信息(又称 数据指纹)
- 十六进制格式的字符串
- hash.digest()
- 返回传递给update()函数的所有数据的摘要信息
- 二进制格式的字符串
二、hashlib模块使用步骤
- 1、获取一个哈希算法对应的哈希对象(比如名称为hash)
- hashlib.new(哈希算法名称, 初始出入信息)
- 获取这个哈希对象,如hashlib.new('MD5','Hello'),hashlib.new('SHA1','Hello')
- hashlib.哈希算法名称()
- 获取这个哈希对象,如hashlib.md5(),hashlib.sha1()
- hashlib.new(哈希算法名称, 初始出入信息)
- 2、设置/追加输入信息
- 调用已得到哈希对象的 update(输入信息) 方法可以设置或追加输入信息,多次调用该方法,等价于 把每次传递的参数凭借后进行作为一个参数垫底给update()方法。
- 多次调用为累加,不是覆盖,见hash.update()
- 3、获取输入信息对应的摘要
- 调用已得到的哈希对象的 digest() 方法或 hexdigest() 方法即可得到传递给update()方法的字符串参数的摘要信息。
- digest()方法返回的摘要信息是一个二进制格式的字符串,其中可能包含非ASCII字符、NULL字节,该字符串长度可以通过哈希对象的 hash.disgest_size 属性获取
- hexdigest()方法返回的摘要信息是一个十六进制格式的字符串,该字符串中只包含十六进制的数字,且长度比digest()返回结果长度的2倍,这可以用于邮件的安全交互或其他非二进制环境中。
三、优化
1、防撞库,使用“加盐”加密
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 import hashlib 2 inp = input('输入:>>') 3 #创建一个md5加密对象,并‘加盐’加密,防撞库反解 4 hash = hashlib.md5('super'.encode('utf-8')) 5 #生成md5加密字符串 6 hash.update(bytes(inp,encoding='utf-8')) 7 #把md5加密好的字符串打印出来 8 print(hash.hexdigest())
2、一句
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 hash = hashlib.md5(inp.encode('utf-8')).hexdigest()