hashlib加密模块
1.何为加密
将明文数据处理成密码数据 让人无法看懂
2.为什么加密
保证数据的安全
3.如何判断数据是否是加密的
一串没有规律的字符串(数字、字母、符号)
4.密文的长短有何讲究
密文越长表示使用的加密算法(数据的处理过程)越复杂
5.常见的加密算法有哪些
md5,base64,hmac,sha系列
6.加密算法基本操作
import hashlib
md5 = hashlib.md5()
md5.update(b'hello')
res=md5.hexdigest()
print(res)
加密补充说明
import hashlib
md5=hashlib.md5()
md5.update(b'hello~world~python~666')
只能从明文到密文正向推导 无法从密文到明文反向推导
常见的解密过程其实是提前猜测了很多种结果
123 密文
321 密文
222 密文
3.加盐处理
在明文里面添加一些额外的干扰项
md5 = hashlib.md5()
md5.update('公司设置的干扰项'.encode('utf8'))
md5.update(b'hello python')
res = md5.hexdigest()
print(res)
4.动态加盐
干扰项是随机变化的
例如:当前时间、用户名部分等
5.加密实战操作
1)用户密码加密
2)文件安全性校验
3)文件内容一次性校验
4)大文件内容加密
截取部分内容加密即可,例如500G文件,分10-20个验证部分,每部分验证,全部验证通过则认为是同一个文件
subprocess模块
类似操作系统终端 执行命令并获取结果
import subprocess
res = subprocess.Popen(
'dir',
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
)
print('正确结果',res.stdout.read().decode('gbk'))
print('错误结果', res.stderr)
logging日志模块
1. 如何理解日志
简单的理解为是记录行为举止的操作(历史史官)
2. 日志的级别
五种级别
3. 日志模块要求
代码无需掌握 但是得会CV并稍作修改
import logging
# logging.debug('debug message')
# logging.info('info message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf8',)
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('你好')
日志的组成
1.产生日志
2.过滤日志
基本不用 因为在日志产生阶段就可以控制想要的日志内容
3.输出日志
4.日志格式
import logging
logger = logging.getLogger('购物车记录')
hd1 = logging.FileHandler('a1.log', encoding='utf-8')
hd2 = logging.FileHandler('a2.log', encoding='utf-8')
hd3 = logging.StreamHandler()
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
logger.setLevel(10)
logger.debug('写了半天 好累啊 好热啊')
日志配置参数
logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
format参数中可能用到的格式化串:
日志配置字典
import logging
import logging.config
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]'
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
logfile_path = 'a3.log'
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': logfile_path,
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'encoding': 'utf-8',
},
},
'loggers': {
'': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': True,
},
},
}
logging.config.dictConfig(LOGGING_DIC)
logger1 = logging.getLogger('红浪漫顾客消费记录')
logger1.debug('慢男 猛男 骚男')
日志实战应用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗