day03.31
hashlib加密模块
加密就是将明文数据通过一些手段变成密文数据的过程。密文数据的表现形式一般都是由一串没有规则的字符串组成。
一般情况下涉及到隐私数据的时候,应该考虑使用加密;最为常见的就是对用户的进行密码加密处理,防止密码泄露。
将明文变为密文的内部规则就叫做加密算法。可以根据产生密文的长短来判断加密算法的复杂程度,一般来说密文越长就意味着加密算法越复杂。
加密算法有很多种,以MD5为例:
import hashlib md5 = hashlib.md5() md5.update(b'hello') # 将明文数据传递给算法对象,只能接收bytes类型;如果字符串中是纯数字和英文,那么直接在前面加b转成bytes类型 res = md5.hexdigest() # 获取加密之后的密文数据 print(res) # 5d41402abc4b2a76b9719d911017c592 # ps:在传入数据的时候,只要明文内容一致,那么算法得到的密文的结果肯定一致 # MD5加密算法也支持分次输入明文数据,最后得到的密文数据字符不会发生改变 md5 = hashlib.md5() md5.update(b'hello') md5.update(b'world') md5.update(b'jason') print(md5.hexdigest()) # 8faebe82e744992e51c86845cac3e1b7 md5.update(b'helloworldjason') print(md5.hexdigest()) # 8faebe82e744992e51c86845cac3e1b7
加密数据如何校验:
用户输入的明文数据,但是到了程序里面之后会采用加密算法变成密文数据;之后拿着密文数据与跟数据库里面的密文比对,如果一致就校验成功,不一致就是校验失败。
使用MD5加密算法得到的加密数据是无法直接反解密的,所谓的解密实质上就是用加密字符数据库去比对指定的加密数据,达到解密的目的。
文件内容一致性校验:
小文件进行全部读取加密,并进行校验,以验证用户下载的数据文件是否被修改,是否存在病毒文件。
大文件由于数据量大,全部读取并加密不太现实,速度会很慢,因此经常采用切片操作的方式进行分段读取加密,然后进行校验。
加密算法的加盐处理:
通过添加一些额外的干扰项,来增加破解的难度。
import hashlib md5 = hashlib.md5() # 加盐处理 md5.update('你追我'.encode('utf8')) md5.update(b'123') print(md5.hexdigest()) # ce850e70febde5f3506fec0479dc0f96
动态加盐:
干扰项是动态变化的,可以是用户名的一部分,也可以是当前时间等等。
logging模块
logging模块就是日志模块,日志模块就是在程序的各个环境记录以便于后续的查看操作记录的模块。
日志等级:
日志按照重要程度分为五个级别:默认只有达到warning警告级别及以上才会记录日志!!!
import logging logging.debug('debug message') # 10 logging.info('info message') # 20 logging.warning('warning message') # 30 warning级别 logging.error('error message') # 40 logging.critical('critical message') # 50
eg:
import logging file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8', ) # 所有的格式不需要记忆,后续几乎都是拷贝加修改 logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', handlers=[file_handler, ], level=logging.ERROR ) logging.error('提示警告信息')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?