首页 > 其他分享 >第三方模块,hashlib,subprocess,logging

第三方模块,hashlib,subprocess,logging

时间:2022-10-28 20:47:48浏览次数:66  
标签:-% hashlib 加密 subprocess logging 日志 logger md5

hashlib加密模块

# 1.加密就是把明文数据变为密文
# 2.加密的目的是为了保证数据的安全
# 3.加密后的数据是一串没有规律的字符串
# 4.加密后的密文越长说明使用的加密算法(数据的处理过程)越复杂    
# 5.常见的加密算法有md5,base64,hmac,sha系列
# 6.加密算法的操作:
import hashlib
# 1.选择加密算法
mb5 = hashlib.md5()

# 2.传入明文数据
md5.update(b'12345')        # b 前缀代表的就是bytes python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法

# 3.获取加密密文
res = md5.hexdigest()
print(res)       # 827ccb0eea8a706c4c34a16891f84e7b

加密算法的补充:
# 1.加密算法不变,如果内容相同,加密后的结果也一定相同。
方式1:一次加密所有,把所有传进去
md5.update(b'hello~world~python~666')
方式2:分多次传入加密
md5.update(b'hello')  
md5.update(b'~world') 
md5.update(b'~python~666')  
         两种方式所得的结果是一样的
# 2.加密后的密文是不能进行反解密的
# 3.加盐处理:  在明文里面添加一些额外的干扰项
     # 1.选择加密算法
     md5 = hashlib.md5()
     # 2.传入明文数据
     md5.update('公司设置的干扰项'.encode('utf8'))
     md5.update(b'hello python')
     # 3.获取加密密文
     res = md5.hexdigest()
     print(res)    
# 4.动态加盐: 干扰项是随机变化的
     当前的时间,用户名部分都可作为干扰项
# 5.加密实战操作
     1.用户密码加密
     2.文件安全性校验
     3.文件内容一致性校验
     4.大文件内容加密 : 对截取的部分内容进行加密即可

 

subprocess模块

# 模拟操作系统终端,执行命令并获取结果

import subprocess

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

 

logging日志模块

1.日志就是记录用户等行为举止的操作
2.日志有五种级别
      logging.debug('debug等级')       # 10
      logging.info('info等级')         # 20
      logging.warning('warning等级')   # 默认从warning级别开始记录日志  30 
      logging.error('error等级')       # 40
      logging.critical('critical等级') # 503.日志的代码及基本使用(无需掌握,cv并会修改即可)
import logging

file_handler = logging.FileHandler(filename='l1.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.日志的组成 1).产生日志 2).过滤日志 3).输出日志 4).日志格式 import logging # 1.日志的产生(准备原材料) logger对象 logger = logging.getLogger('购物车记录') # 2.日志的过滤(剔除不良品) filter对象:可以忽略,不用使用 # 3.日志的产出(成品) handler对象 handler1 = logging.FileHandler('a1.log', encoding='utf-8') # 输出到文件中 handler2 = logging.FileHandler('a2.log', encoding='utf-8') # 输出到文件中 handler3 = logging.StreamHandler() # 输出到终端 # 4.日志的格式(包装) 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(handler1) logger.addHandler(handler2) logger.addHandler(handler3) # 6.handler绑定formmate对象 handler1.setFormatter(fm1) handler2.setFormatter(fm2) handler3.setFormatter(fm1) # 7.设置日志等级 logger.setLevel(10) # 8.记录日志 logger.debug('好好写')


5.日志配置字典 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, '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('慢男 猛男 骚男')

 

 

 

标签:-%,hashlib,加密,subprocess,logging,日志,logger,md5
From: https://www.cnblogs.com/juzijunjun/p/16837409.html

相关文章