Atopos

导航

hashlib模块,logging模块及第三方模块的下载

hashlib模块,logging模块及第三方模块的下载

image

1.hashlib模块

1.定义
hash是一种算法
hashlib模块是一种加密的模块
将一系列明文数据通过一系列算法将之变成密文数据

2.加密算法的几大系列
  md系列
  sha系列
  base系列
  hmac系列

3.基本使用
  # 导入模块
import hashlib
#1.先确定使用的算法类型 现在普遍使用nd5算法
md5 = hashlib.md5()
#2.将明文数据传给算法类型 需将数据转换成字节
md5.update('123'.encode('utf8'))
md5.update(b'123')
#3.获取加密之后的密文数据(没有规则的一串随机字符串)
res = md5.hexdigest()
print(res)

4.示例
import hashlib
md5 = hashlib.md5()
md5.update('123lyj'.encode('utf8'))
print(md5.hexdigest()) # d7e959f1a7b73098de826a3b13f91f05
res = md5.hexdigest()
print(res) # d7e959f1a7b73098de826a3b13f91f05

import hashlib
md5 = hashlib.md5()
# md5.update('123lyj'.encode('utf8'))
md5.update('123'.encode('utf8'))
md5.update('lyj'.encode('utf8'))
print(md5.hexdigest())
res = md5.hexdigest()
print(res) # d7e959f1a7b73098de826a3b13f91f05

注意:
1.加密算法只能接受bytes类型数据
2.明文数据只要是相同的,那么无论如何传递加密结果肯定是一样的
3.密文数据越长表示内部对应的算法越复杂,越难被正向破解
4.获取加密之后的密文数据是一串没有规则随机的字符串

5.加盐处理
其实就是在对明文数据做加密处理过程前添加一些干扰项
eg
  import hashlib
md5 = hashlib.md5()
md5.update('123jason'.encode('utf8'))
md5.update('加盐处理'.encode('utf8'))
res= md5.hexdigest()
print(res) # 未加盐 65a2eab1aaca6a9aa2a0e9d58ee20f36
           # 加盐 bb16776768b6da3cb2cc7fba85d2c61b

6.动态加盐
动态加盐(干扰项),可以为当前时间,用户名的部分(随机的不会重复的字符串)
eg
  import hashlib
md5 = hashlib.md5()
md5.update('123'.encode('utf8'))
import time
res1 = str(time.time())
md5.update(res1.encode('utf8'))
res = md5.hexdigest()
print(res) # f82679403b98fb81d9d1087c0b09d422
	    # 2b5438269caf1122cbc72c1023e3e64d
		# 动态加盐后每次的密文都不一样

7.校验文件一致性
  文件不是很大的情况下,可以将所有文件内容全部加密处理
  但如果文件特别大,全部加密处理会相当耗时耗资源,针对这样的大文件可以使用切片读取的方式
eg
  import hashlib
md5 = hashlib.md5()
with open(r'a.txt','rb')as f:
    for line in f:
        md5.update('line'.encode('utf8'))
real_data = md5.hexdigest()
print(real_data)
import os
# 读取文件总大小
res = os.path.getsize(r'a.txt')
print(res)
read_method = [0,res//4,res//2,res]

image

2.logging模块

import logging
1.日志的五个等级
  1.1 logging.debug('debug级别') # 10级
  1.2 logging.info('info级别') # 20级
  1.3 logging.warning('warning级别') # 30级
  1.4 logging.error('error级别') # 40级
  1.5 logging.critical('critical级别') # 50级
注意:一般默认记录的级别在30级及以上

2.日志的四个对象
  1.logger对象
  负责生产日志
logger = logging.getlogger('今日有下雨')
  
  2.filter对象
  负责过滤日志(直接忽略)

  3.handler对象
  负责日志产生的位置
  hd1 = logging.FileHandler('a1.log',encoding='utf8')  # 产生到文件的
  hd2 = logging.StreamHandler()  # 产生在终端的


  4.formatter对象
  负责日志的格式
  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',
)

注意:每个handler对象都可以拿一个formatter对象

3.配置字典
核心就在于CV
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配置
    },
}


# 使用配置字典
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
logger1 = logging.getLogger('xxx')
logger1.debug('好好的 不要浮躁 努力就有收获')

image

3.第三方模块的下载

第三方模块是基于网络下载下来的
1.第三方模块的下载方式
1.1命令行借助于pip工具
pip3 install 模块名 # 不知道版本默认是最新版本
pip3 install 模块名==版本号 # 指定版本下载
pip3 install 模块名-i 仓库地址 # 临时切换

注意:
1.pip所在的路径添加环境变量
2.pip命令默认下载的渠道是国外的python官网,下载速度有时候会比较慢
pip3 install openpyxl -i http://mirrors.aliyun.com/pypi/simple/
3.我们可以切换到国内的源下载
    (1)阿里云 http://mirrors.aliyun.com/pypi/simple/
    (2)豆瓣 http://pypi.douban.com/simple/
    (3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
    (4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
    (5)华中科技大学http://pypi.hustunique.com/

1.2pycharm快捷方式
步骤:
    settings -->>project-->>project interprter-->>双击或者点加号
点击右下方manage管理添加源地址即可

image

posted on 2021-11-29 16:29  Atopos_q  阅读(36)  评论(0编辑  收藏  举报