常用模块2
一 .hashlib模块
1.对摘要算法的认识
(1).摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
(2).对于同一个字符串,不管这个字符串长度多长,只要相同的,无论在任何环境下多次执行,在任何语言中使用相同的算法,相同的手段得到的结果都是相同的,只要不是相同的字符串,得到的结果一定不同
2.摘要算法MD5
(1)hashlib.md5
(2)md5的计算速度很快,生成的是一个32位的十六进制字符.
(3)如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import hashlib a = hashlib.md5() a.update(a.encode("utf-8")) ret = a.hexdigest() print(ret)
(4)由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
加盐 import hashlib a = hashlib.md5("123".encode("utf-8")) a.update("456789qwer".encode("utf-8")) ret = a.hexdigest() print(ret) 动态加盐 username = input('username : ') passwd = input('password : ') md5obj = hashlib.md5(username.encode('utf-8')) md5obj.update(passwd.encode('utf-8')) print(md5obj.hexdigest()) ee838c58e5bb3c9e687065edd0ec454f
3.摘要算法 sha1
(1)hashlib.sha1
(2)hashlib计算速度较慢,但是过程复杂,更安全. 生成的是一个40位的十六进制字符.
(3)如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import hashlib a = hashlib.sha1() a.update("15234".encode("utf-8"))#1270f53049a7a5276019a7f931772c886fac6294 a.update("rewy".encode("utf-8")) ret = a.hexdigest() print(ret)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步