hashlib加密模块及subprocess远程命令模块

hashlib加密模块及subprocess远程命令模块

一、hashlib加密模块

1.加密模块简介

1.加密模块简介
  将明文数据进行加密处理,转变为密文数据再存储或者传输,这样的安全机制可以让用户的数据不容易泄露,一般情况下一串没有规则的数字字母组合一般都是加密之后的结果,密文越长表示使用的加密算法(数据的处理过程)越复杂
2.常见的加密算法
  md5,base64,hmac,sha系列(sha1,sha2,sha3)

2.加密模块的md5加密

import hashlib

md5 = hashlib.md5() #md5加密
md5.update(b'useranme')  #数据类型必须是bytes
res = md5.hexdigest()   #获取加密后的结果
print(res)            # 78d8856b5c6cab3ffe28552bcbdf15e8

3.额外的知识点

import hashlib

md5 = hashlib.md5() #md5加密
md5.update(b'useranme~pwd')  #数据类型必须是bytes
# md5.update(b'useranme~')  #数据类型必须是bytes
# md5.update(b'pwd')  #数据类型必须是bytes
res = md5.hexdigest()   #获取加密后的结果
print(res)           # 结果都是19627664f7c9922385641fba9e511cfd

# 加密算法不变,内容如果相同,那么结果一定相同
# 加密之后的结果是无法反向解密的,只能从明文到密文推导,不能密文到明文推导

4.加盐处理

import hashlib

md5 = hashlib.md5() #md5加密
md5.update('设置的干扰项目'.encode('utf8'))
md5.update(b'useranme~pwd')  #数据类型必须是bytes
res = md5.hexdigest()   #获取加密后的结果
print(res)
1.因为加盐处理也是人为设定的一个值,所以也不太安全,所以我们选择动态加盐
2.加密之后的结果一般不能反解码
3.当加密大文件时,如果将全部加密的话那样太慢了,所以要操作进行优化截取一部分的内容进行分段加密

二、subprocess远程命令模块

subprocess的作用:
 模拟操作系统终端,执行命令并获取结果
 import subprocess

cmd = input('请输入您的指令>>>').strip()
res = subprocess.Popen(
    cmd,        #操作系统要执行的命令
    shell=True, #固定配置
    stdin=subprocess.PIPE,   #输入命令
    stdout=subprocess.PIPE,  #输出命令
)
print(res.stdout.read().decode('gbk'))
print(res.stderr.read().decode('gbk'))   

三、logging日志模块

1.日志的作用
  日志的作用就是记录程序在运行过程中发生的记录,日志文件数据写完后基本不会去改动,需要放到配置文件中
2.日志的等级
logging.debug('debug等级')  # 10
logging.info('info等级')  # 20
logging.warning('warning等级')  # 默认从warning级别开始记录日志  30
logging.error('error等级')  # 40
logging.critical('critical等级')  # 50
日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG)
3.日志的应用
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='x11.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('我就是我,不一样的烟火')
图片名称
4.固定的配置字典
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'
# 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,
            '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('体测登记表')
logger1.debug('小帅哥')
图片名称
5.日志的组成
  (1).产生日志 (logger)
  (2).过滤日志 (filter)
  (3).输出日志 (handler)
  (4).日志格式 (format)
posted @ 2022-10-27 18:40  小王应该在学习!  阅读(39)  评论(0编辑  收藏  举报