python基础:hashlib加密模块
hashlib加密模块
hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库。其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)
1 加密的含义简介
1.何为加密?
将明文数据处理成密文数据,让人无法看懂
2.为什么加密?
加密可以保证数据的安全,防止数据中途拦截泄漏
3.如何判断数据是否是加密的?
当一串字符串没有规律,中间包含无规律的字母、数字、符号
4.密文的长短代表了什么
密文越长表示使用的加密算法越复杂
5.常见的加密算法有哪些?
md5、base64、hmac、sha系列
2 加密算法基本操作
1.选择加密算法
import hashlib # 导入hashlib 加密模块 md5 = hashlib.md5() # 选择加密语法为md5,构建md5对象
2.传入明文数据
md5.updata(b'hello') # updata更新哈希对象以字符串参数 # 传入想要加密的明文,b''表示是二进制数据 "update属性的参数含义" md5.undate('待加密的明文'.encode(encoding='utf8))
3.获取加密密文
res = md5.hexdigest() # hexdigest返回摘要,作为十六进制数据字符串值 print(res) # 通过 md5.hexdigest() md5中的hexdigest方法来获取加密的密文
转换成二进制的三种方法
1
b''
2str.encode()
3bytes()
4*设定hashlib md5 加密函数
import hashlib def hashlib_md5(password): m = hashlib.md5() # 构建MD5对象 m.update(password.encode(encoding='utf-8')) # 设置编码格式 并将字符串添加到MD5对象中 password_md5 = m.hexdigest() # hexdigest()将加密字符串 生成十六进制数据字符串值 return password, password_md5 res = hashlib_md5('123456') print(res) -------------------- ('123456', 'e10adc3949ba59abbe56e057f20f883e')
3 加密补充说明(hashlib的特点)
1.加密算法不变,如果传入的明文相同,加密后的密文相同
1.明文一次性输入 import hashlib md5 = hashlib.md5() md5.update(b'hello~world~python') res = md5.hexdigest() print(res) # 393f30266b770278539d8fd96ff521c0 2.明文分次输入 md5.update(b'hello') md5.update(b'~world') md5.update(b'~python') res = md5.hexdigest() print(res) # 393f30266b770278539d8fd96ff521c0 """ 由此可见,只要传入的明文完全相同,算法相同的情况下,输出的密文也会完全相同 """
2.加密之后的结果是无法反解密的
hashlib 具有单向计算特性,无法通过密文反推明文,因此它可以在不存储明文口令的情况下验证用户口令
hashlib 具有单向计算特性,只能从明文到密文加密,不能从密文到明文解密
所谓解密只是已经记录了很多常用的明文加密的结果
3.加盐处理和动态加盐
1) 加盐处理
在明文中增加一些干扰项,防止明文过于简单容易被猜测
import hashlib md5 = hashlib.md5() md5.updata(b'公司干扰项', encoding='utf8') # 添加干扰项,防止明文过于简单 md5.update(b'hello~world~python') res = md5.hexdigest() # 动态加盐 干扰项是随机变化的,防止干扰项被泄露后用户数据被反向匹配到 ps:常用的一些动态干扰项---当前时间、用户名的部分字符...,将这些动态的字符也添加一起加密成密文,得到的结果更加安全,难以猜测结果
- 动态加盐
干扰项是随机变化的,防止干扰项被泄露后用户数据被反向匹配到(通过撞库可以反解)
ps:常用的一些动态干扰项---当前时间、用户名的部分字符...,将这些动态的字符也添加一起加密成密文,得到的结果更加安全,难以猜测结果
4 加密操作的用处
1.用户密码加密
2.文件安全性校验
3.文件内容一致性校验
利用hashlib 具有单向计算的特性。
在下载文件时,既下载文件本身的内容,也下载加密后的密文,通过下载后对文件进行加密处理。对比加密后的密文是否一致,如果密文一致则俩个文件内容相同,不一致则说明文件可能在下载过程中被恶意篡改。
4.大文件内容加密
由于大文件数据量很大,不会全部加密,然后对比密文,这样效率大大降低。会通过截取部分内容加密的方法,对比加密部分,验证文件的内容是否一致。
比如:将一个1000G的文件,截取其中的100个小部分。将这100个部分进行加密,在文件下载后对比这100个部分是否相同,如果有不同则说明文件在下载的时候被篡改了,文件就不安全了,即可提醒用户该文件可能被木马病毒感染了。
5 优秀hash算法的特性
正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY