hashlib加密模块 logging日志模块
理解什么是加密?
1 2 | 将明文(人看得懂)数据通过一些手段变成密文数据(人看不懂) 密文数据的表现形式一般都是一串没有规则的字符串 |
加密算法
1 2 3 | 加密算法>>>(将明文变密文的内部规则) 算法的难易程度可以根据产生密文的长短来判断 越长意味着算法越复杂<br><br>在传入数据的时候 只要内容一致 那么算法的结果肯定一致<br><br>加密之后的结果是无法直接反解密的<br><br>市面上所谓的反解密其实是暴力破解>>>:本质上是自己模拟一些密码组合进行加密 打包后进行比对 反复的猜<br><br>为了防止被被暴力破解 我们可以增加破解的难难度>>>进行加盐处理 |
加密模块的使用场景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 涉及到隐私数据的时候 应该考虑使用加密 最为常见的就是对用户的密码加密 防止密码泄露 还可以对文件做对比 1. 密码加密如何比对 用户输入的是明文 到了程序里面之后会采用相同的加密算法变成密文 之后拿着密文与跟数据库里面的密文比对 如果一致就是密码正确 不一致就是错误 2. 文件内容一致性校验 作为软件的提供者 我们在提供安全软件的同时会对给该软件内容做加密处理 得到一个该安全软件独有的密文 用户在下载软件之后也会对内容做相同的加密 比对两次密文是否一致 如果秘闻是相同 表示中途没有被修改 如果不是 表示中途被修改过 可能存在病毒 针对大文件一致性校验的优化策略 如果一个文件有 10G 那么如果全部读取并加密速度太慢 这个时候可以考虑对文件内容进行切片读取并加密的操作 |
代码演示
1 2 3 4 5 6 7 8 9 | import hashlib # 导入 hashlib模块 # 1.指定算法>>>:md5算法(最为常见 一般的业务需求足够了) md5 = hashlib.md5() # 2.将明文数据传递给算法对象 转换成bytes类型 进行加密 md5.update(b 'shopping' ) # 只能接收bytes类型 # """如果字符串中是纯数字和英文 那么直接在前面加b转成bytes类型""" # 3.获取加密之后的密文数据 res = md5.hexdigest() print (res) # b2fe440cb7a0b127f1a90ffea296313b |
针对一些大文件 可以使用分段调用
1 2 3 4 5 6 7 8 9 10 | md5 = hashlib.md5() md5.update(b 'go' ) md5.update(b 'to' ) md5.update(b 'shopping' ) print (md5.hexdigest()) # a4b3a9b699c474c0bc4dcbec0a6e9fe5 md5.update(b 'gotoshopping' ) print (md5.hexdigest()) # a4b3a9b699c474c0bc4dcbec0a6e9fe5 """ 分段调用不影响密文计算结果 """ |
加盐处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 动态加盐 干扰项动态变化 进一步增加难度 可以是用户名的一部分 也可以当前时间... #代码示例 import hashlib # 导入 hashlib模块 md5 = hashlib.md5() # 调用md5算法 # 加盐处理(添加一些额外的干扰项) md5.update( '你猜呀' .encode( 'utf8' )) md5.update(b '666' ) print (md5.hexdigest()) # 887654cb80fcbbbc332ebf9aaa67e8a3 |
1 | 日志模块就是在程序的各个环境记录日志 便于后续的查看 <br>日志按照重要程度分成五个等级 等级不同记录的内容不同 你可以自行设置输出日记级别 |
日志等级
1 2 3 4 5 6 7 | import logging # 日志按照重要程度分为五个级别:默认只有达到warning警告级别及以上才会记录日志 logging.debug( 'debug message' ) # 10级 所有的事情都记录 logging.info( 'info message' ) # 20级 记一些常规的事情 logging.warning( 'warning message' ) # 30级 可能要出错了 logging.error( 'error message' ) # 40级 报错啦 logging.critical( 'critical message' ) # 50级 可能要崩溃了 |
logging基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # logging配置 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 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统