python-- hashlib 模块
前戏
hashlib摘要算法的模块能够把一个字符串数据类型的变量,转换成一个定长的、密文的字符串,字符串里的每一个字符都是一个十六进制数字
对于同一个字符串,不管这个字符串有多长,只要是相同的,无论在任何环境下,多少次执行,在任何语言中,使用相同的算法、相同的手段得到的结果永远是相同的,只要不是相同的字符串,得到的结果一定不同
md5是一个算法,32位的字符串,每个字符都是一个十六进制
sha1也是一个算法,40位的字符串,每个字符都是一个十六进制
hashlib
import hashlib m = hashlib.md5() m.update('hello卧槽'.encode(encoding=('utf-8'))) print(m.hexdigest()) m.update(b'kitty') print(m.hexdigest()) # =m.update(b'hello卧槽kitty')
结果:
37a7e55322e9c07f55b4a5f2d1cb4e37
4c2af0766bfd01846e7bb41d778202cb
例
import hashlib s = 'zouzou123' md5_obj = hashlib.md5() # 实例化一个md5对象 md5_obj.update(s.encode('utf-8')) res = md5_obj.hexdigest() # 加密后的结果 print(res, type(res), len(res))
结果:
c018ac898b8c0cb16c623b0d1767d374 <class 'str'> 32
加盐
import hashlib s = 'zouzou123' md5_obj = hashlib.md5('任意的字符串作为盐'.encode('utf-8')) md5_obj.update(s.encode('utf-8')) res = md5_obj.hexdigest() print(res, len(res), type(res))
结果:
c5b76512a84656fcae4fe2b8c86dace8 32 <class 'str'>
动态加盐
import hashlib username = input('username : ') passwd = input('password : ') md5obj = hashlib.md5(username.encode('utf-8')) md5obj.update(passwd.encode('utf-8')) print(md5obj.hexdigest())
sha1 加密
sha1或者shaxx的加盐和不加盐的用法和md5的一样,只需要在实例化的时候把md5换成sha1或者shaxx
import hashlib s = 'zouzou123' md5_obj = hashlib.sha1() md5_obj.update(s.encode('utf-8')) res = md5_obj.hexdigest() print(res, type(res), len(res))
结果:
b4b4aeb89675cd505bbbc36288e9019f2a047341 <class 'str'> 40
文件的一致性校验
import hashlib md5_obj = hashlib.md5() with open('test', 'rb') as f: md5_obj.update(f.read()) ret1 = md5_obj.hexdigest() md5_obj = hashlib.md5() with open('demo', 'rb') as f: md5_obj.update(f.read()) ret2 = md5_obj.hexdigest() print(ret1, ret2) # 看两个文件md5后的值是不是一样
md5字符串的拼接
import hashlib md5_obj = hashlib.md5() md5_obj.update('zouzou,abc,def'.encode('utf-8')) print(md5_obj.hexdigest()) md5_obj = hashlib.md5() md5_obj.update('zouzou,'.encode('utf-8')) md5_obj.update('abc,'.encode('utf-8')) md5_obj.update('def'.encode('utf-8')) print(md5_obj.hexdigest())
结果:
58f4cfbd8cd4b57f25a56cea403de1bb
58f4cfbd8cd4b57f25a56cea403de1bb
实例化了两次,如果第二次没实例化,则会把上面的字符串+到前面在进行md5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)