hashlib模块
加密:将明文数据通过一系列算法变成加密文数据(目的是为了让数据更加安全)
加密算法:md系列,sha系列,base系列,hmac系列
1 import hashlib
2
3 # 先确定算法类型(md5普遍使用)
4 md5 = hashlib.md5()
5 # 将明文数据传递给md5算法(update只能接受bytes类型数据)
6 md5.update(b'123')
7 # 获取加密之后的密文数据(没有规则的一连串数据)
8 res = md5.hexdigest()
9 print(res)
加密之后的密文数据是没有办法反解密成明文数据的。
市面上的破解其实就是提前算出一系列明文对应的密文,之后对比密文获取明文。
①明文数据是要相同,那么无论如何传递加密结果肯定是一样的
1 # 1.先确定算法类型(md5普遍使用)
2 md5 = hashlib.md5()
3 # 2.将明文数据传递给md5算法(update只能接受bytes数据类型)
4 md5.update(b'hellojason123')
5 res = md5.hexdigest()
6 print(res) # 4bd388611b31c548eedef14b16c9868c
7 md5.update(b'hello')
8 md5.update(b'jason')
9 md5.update(b'123')
10 res1 = md5.hexdigest()
11 print(res1) # 4bd388611b31c548eedef14b16c9868c
②明文数据越长表示内部对应的算法越复杂,越难被正向破解。
1 # 先确定算法类型(md5普遍使用)
2 md5 = hashlib.sha1()
3 # 再通过明文数据传递给md5算法(update只能接受bytes)
4 md5.update(b'helloword123')
5 res = md5.hexdigest()
6 print(res) # 0c2666238e9f1e65a17f2611285ce95c059d9a76
密文越长表示算法越发越复杂 对应的破解算法难度越高,同时越复杂的算法需要的消耗的资源就越多,密文越长基于网络发送的需要占用的数据就越大。
③涉及到用户密码存储,其实都是密文,只要用户自己知道铭文是什么
1 """
2 1.内部程序员无法得知明文数据
3 2.数据泄露也无法得知明文数据
4 ATM购物车练习 用户密码采取的就是密文存取
5 """
④加盐处理
1 # 在对明文数据加密处理过程前添一些干扰项
2 # 先确定使用的算法(md5最普遍)
3 md5 = hashlib.md5()
4 # 将明文数据传递给md5
5 md5.update(b'helloword')
6 # 加盐(干扰项)
7 md5.update('公司内部自己定义的盐'.encode('utf8'))
8 # 真实数据
9 md5.update('12345'.encode('utf8'))
10 # 获取加密后的密文数据(没有规则的一串随机数)
11 res = md5.hexdigest()
12 print(res)
⑤动态加盐
1 """
2 在对明文数据做加密处理过程前添加一些变化的干扰项
3 """
4 import hashlib
5 # 1.先确定算法类型(md5普遍使用)
6 md5 = hashlib.md5()
7 # 2.将明文数据传递给md5算法(update只能接受bytes类型数据)
8 md5.update('123'.encode('utf8'))
9 # 加盐(干扰项)
10 md5.update('公司内部自己定义的盐'.encode('utf8'))
11 # 动态加盐(干扰项) 当前时间 用户名的部分 uuid(随机字符串(永远不会重复))
12 import time
13 res1 = str(time.time())
14 md5.update(res1.encode('utf8'))
15 # 真实数据
16 md5.update(b'hellojason123')
17 # 3.获取加密之后的密文数据(没有规则的一串随机字符串)
18 res = md5.hexdigest()
19 print(res) # 4326fe1839d7c4186900eb2b356d4f8a
⑥检校文件一致性
1 import hashlib
2
3 md5 = hashlib.md5()
4 with open(r'a.txt', 'rb') as f:
5 for line in f:
6 md5.update(line)
7 real_data = md5.hexdigest()
8 print(real_data)
logging日志模块
1 import logging
2 # 日志有五个等级(从上往下重要程度不同)
3 logging.debug('debug级别') # 10
4 logging.info('info级别') # 20
5 logging.warning('warning') # 30
6 logging.error('error级别') # 40
7 logging.critical('critical级别') # 50
8 '''默认记录的级别在30 及以上'''
1 # 简单使用
2 file_handler = logging.FileHandler(filename='x1.log', made='a', encoding='utf8')
3 logging.basicConfig(
4 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
5 datefmt='%Y-%m-%d %H:%M:%S %p',
6 handlers=[file_handler, ],
7 level=logging.ERROR)
8 logging.error('好好学习,天天向上')
9 """
10 1.如何控制日志输入的位置
11 想在文件和终端中同时打印
12 2.不同位置如何做到不同的日志格式
13 文件详细一些 终端简单一些
14 """
日志模块详细介绍
1 # 日志有五个等级(从上往下重要程度不同)
2 logging.debug('debug级别') # 10
3 logging.info('info级别') # 20
4 logging.warning('warning') # 30
5 logging.error('error级别') # 40
6 logging.critical('critical级别') # 50
7 '''默认记录的级别在30 及以上'''
8
9 # 简单使用
10 file_handler = logging.FileHandler(filename='x1.log', made='a', encoding='utf8')
11 logging.basicConfig(
12 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
13 datefmt='%Y-%m-%d %H:%M:%S %p',
14 handlers=[file_handler, ],
15 level=logging.ERROR)
16 logging.error('好好学习,天天向上')
17 """
18 1.如何控制日志输入的位置
19 想在文件和终端中同时打印
20 2.不同位置如何做到不同的日志格式
21 文件详细一些 终端简单一些
22 """
23
24 import logging
25
26 # logging:负责产生日志
27 logger = logging.getLogger('转账记录')
28 # handler对象:负责日志的产生的位置
29 hd1 = logging.FileHandler('xx.log', encoding='utf8')
30 hd2 = logging.FileHandler('xx.log', encoding='utf8') # 产生的结果到文件
31 hd3 = logging.FileHandler('xx.log', encoding='utf8')
32 # formatter负责日志的格式
33 fm1 = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
34 datefmt='%Y-%m-%d %H:%M:%S %p', )
35 fm2 = logging.Formatter(fmt='%(asctime)s - %(name)s %(message)s',
36 datefmt='%Y-%m-%d', )
37
38 # 5.绑定handler对象
39 logger.addHandler(hd1)
40 logger.addHandler(hd2)
41 logger.addHandler(hd3)
42 # 6.绑定formatter对象
43 hd1.setFormatter(fm1)
44 hd2.setFormatter(fm2)
45 hd3.setFormatter(fm1)
46 # 7.设置日志等级
47 logger.setLevel(30)
48 # 8.记录日志
49 logger.debug('好好学习,天天向上')
配置字典
1 # 核心就在于CV
2 import logging
3 import logging.config
4
5 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
6 '[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
7
8 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
9
10 logfile_path = 'a3.log'
11 # log配置字典
12 LOGGING_DIC = {
13 'version': 1,
14 'disable_existing_loggers': False,
15 'formatters': {
16 'standard': {
17 'format': standard_format
18 },
19 'simple': {
20 'format': simple_format
21 },
22 },
23 'filters': {}, # 过滤日志
24 'handlers': {
25 # 打印到终端的日志
26 'console': {
27 'level': 'DEBUG',
28 'class': 'logging.StreamHandler', # 打印到屏幕
29 'formatter': 'simple'
30 },
31 # 打印到文件的日志,收集info及以上的日志
32 'default': {
33 'level': 'DEBUG',
34 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
35 'formatter': 'standard',
36 'filename': logfile_path, # 日志文件
37 'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
38 'backupCount': 5,
39 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
40 },
41 },
42 'loggers': {
43 # logging.getLogger(__name__)拿到的logger配置 空字符串作为键 能够兼容所有的日志
44 '': {
45 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
46 'level': 'DEBUG',
47 'propagate': True, # 向上(更高level的logger)传递
48 }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
49 },
50 }
51
52 # 使用配置字典
53 logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
54 logger1 = logging.getLogger('xxx')
55 logger1.debug('好好学习')
第三方模块
1 # 并不是python自带的 需要基于网络下载!!!
2
3 '''pip所在的路径添加环境变量'''
4 下载第三方模块的方式
5 方式1:命令行借助于pip工具
6 pip3 install 模块名 # 不知道版本默认是最新版
7 pip3 install 模块名==版本号 # 指定版本下载
8 pip3 install 模块名 -i 仓库地址 # 临时切换
9 '''命令行形式永久修改需要修改python解释器源文件'''
10 方式2:pycharm快捷方式
11 settings
12 project
13 project interprter
14 双击或者加号
15 点击右下方manage管理添加源地址即可
16 # 下载完第三方模块之后 还是使用import或from import句式导入使用
17 """
18 pip命令默认下载的渠道是国外的python官网(有时候会非常的慢)
19 我们可以切换下载的源(仓库)
20 (1)阿里云 http://mirrors.aliyun.com/pypi/simple/
21 (2)豆瓣 http://pypi.douban.com/simple/
22 (3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
23 (4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
24 (5)华中科技大学http://pypi.hustunique.com/
25
26 pip3 install openpyxl -i http://mirrors.aliyun.com/pypi/simple/
27 """
28
29
30 """
31 下载第三方模块可能报错的情况及解决措施
32 1.报错的提示信息中含有关键字timeout
33 原因:网络不稳定
34 措施:再次尝试 或者切换更加稳定的网络
35 2.找不到pip命令
36 环境变量问题
37 3.没有任何的关键字 不同的模块报不同的错
38 原因:模块需要特定的计算机环境
39 措施:拷贝报错信息 打开浏览器 百度搜索即可
40 pip下载某个模块报错错误信息
41 """