欢迎光临散文网 会员登陆 & 注册

加密模块与subprocess模块跟日志模块

2022-10-27 21:03 作者:限量版范儿  | 我要投稿

hashlib 加密模块

1.何为加密 将明文数据处理成密文数据 让人无法看懂 2.为什么加密 保证数据的安全 3.如何判断数据是否是加密的 一串没有规律的字符串(数字、字母、符号) 4.密文的长短有何讲究 密文越长表示使用的加密算法(数据的处理过程)越复杂 5.常见的加密算法有哪些 md5、base64、hmac、sha系列 6.加密算法基本操作 import hashlib    # 1.选择加密算法    md5 = hashlib.md5()    # 2.传入明文数据    md5.update(b'hello')    # 3.获取加密密文    res = md5.hexdigest()    print(res)  # 5d41402abc4b2a76b9719d911017c592

加密模块补充说明

1.加密算法不变 内容如果相同 那么结果肯定相同 # md5.update(b'hello~world~python~666')  # 一次性传可以    md5.update(b'hello')  # 分多次传也可以    md5.update(b'~world')  # 分多次传也可以    md5.update(b'~python~666')  # 分多次传也可以 2.加密之后的结果是无法反解密的 只能从明文到密文正向推导 无法从密文到明文反向推导    常见的解密过程其实是提前猜测了很多种结果     123  密文       321     密文     222      密文 3.加盐处理 在明文里面添加一些额外的干扰项    # 1.选择加密算法    md5 = hashlib.md5()    # 2.传入明文数据    md5.update('公司设置的干扰项'.encode('utf8'))    md5.update(b'hello python')  # 一次性传可以    # 3.获取加密密文    res = md5.hexdigest()    print(res)  # e53024684c9be1dd3f6114ecc8bbdddc 4.动态加盐 干扰项是随机变化的     eg:当前时间、用户名部分... 5.加密实战操作 1.用户密码加密 2.文件安全性校验 3.文件内容一致性校验   4.大文件内容加密     截取部分内容加密即可

subprocess模块

模拟操作系统终端 执行命令并获取结果 import subprocess res = subprocess.Popen(    'asdas',  # 操作系统要执行的命令    shell=True,  # 固定配置    stdin=subprocess.PIPE,  # 输入命令    stdout=subprocess.PIPE,  # 输出结果 ) print('正确结果', res.stdout.read().decode('gbk'))  # 获取操作系统执行命令之后的正确结果 print('错误结果', res.stderr)  # 获取操作系统执行命令之后的错误结果

日志的组成

1.产生日志 2.过滤日志 基本不用 因为在日志产生阶段就可以控制想要的日志内容 3.输出日志 4.日志格式 import logging # 1.日志的产生(准备原材料)        logger对象 logger = logging.getLogger('购物车记录') # 2.日志的过滤(剔除不良品)        filter对象>>>:可以忽略 不用使用 # 3.日志的产出(成品)             handler对象 hd1 = logging.FileHandler('a1.log', encoding='utf-8')  # 输出到文件中 hd2 = logging.FileHandler('a2.log', encoding='utf-8')  # 输出到文件中 hd3 = logging.StreamHandler()  # 输出到终端 # 4.日志的格式(包装)             format对象 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', ) # 5.给logger对象绑定handler对象 logger.addHandler(hd1) logger.addHandler(hd2) logger.addHandler(hd3) # 6.给handler绑定formmate对象 hd1.setFormatter(fm1) hd2.setFormatter(fm2) hd3.setFormatter(fm1) # 7.设置日志等级 logger.setLevel(10)  # debug # 8.记录日志 logger.debug('写了半天 好累啊 好热啊')

  • format常用格式说明

%(levelno)s: 打印日志级别的数值 %(levelname)s: 打印日志级别名称 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0] %(filename)s: 打印当前执行程序名 %(funcName)s: 打印日志的当前函数 %(lineno)d: 打印日志的当前行号 %(asctime)s: 打印日志的时间 %(thread)d: 打印线程ID %(threadName)s: 打印线程名称 %(process)d: 打印进程ID %(message)s: 打印日志信息

日志配置字典

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]'  # 其中name为getlogger指定的名字 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'        },        # 打印到文件的日志,收集info及以上的日志        'default': {            'level': 'DEBUG',            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件            'formatter': 'standard',            'filename': logfile_path,  # 日志文件            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M            'backupCount': 5,                # 这里两个参数的意思是一个日志文件最多写5M,最多可以存在五个不同的日志文件,但是当数量达到五个之后就会出现最早的那个会被删除,                # 然后再产生一个新的文件(类似于覆盖了最早的那个文件)            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了        },    },    'loggers': {        # logging.getLogger(__name__)拿到的logger配置        '': {            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕            'level': 'DEBUG',            'propagate': True,  # 向上(更高level的logger)传递        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置        # '购物车记录': {        #     'handlers': ['default','console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕        #     'level': 'WARNING',        #     'propagate': True,  # 向上(更高level的logger)传递        # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置    }, } logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置 # logger1 = logging.getLogger('购物车记录') # logger1.warning('尊敬的VIP客户 晚上好 您又来啦') # logger1 = logging.getLogger('注册记录') # logger1.debug('jason注册成功') logger1 = logging.getLogger('红浪漫顾客消费记录') # 当这里的getLogger内部的参数如果字典中没有,就会自动使用字典中名称为空的那个模版来执行 logger1.debug('慢男 猛男 骚男')

链接:https://www.dianjilingqu.com/589073.html

加密模块与subprocess模块跟日志模块的评论 (共 条)

分享到微博请遵守国家法律