hashlib模块,logging模块及第三方模块的下载
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]
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('好好的 不要浮躁 努力就有收获')
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管理添加源地址即可