几种重要的模块3
1 > hashlib加密模块
1.1 > 加密是什么
将明文(人看得懂)数据通过一些手段变成密文数据(人看不懂),密文数据的表现形式一般都是一串没有规则的字符串
1.2 > 加密算法
加密算法有很多种>>>(将明文变密文的内部规则)。算法的难易程度可以根据产生密文的长短来判断,越长意味着算法越复杂
1.3 > 什么时候使用加密
涉及到隐私数据的时候 应该考虑使用加密,最为常见的就是对用户的密码加密 防止密码泄露
1.4 > 基本使用
1.4.1 > 格式
import hashlib
# 1.指定算法 >>>: md5算法(最为常见 一般的业务需求足够了)
md5 = hashlib.md5()
# 2.将明文数据传递给算法对象
md5.update(b'hello') # 只能接收bytes类型
''' 如果字符串中是纯数字和英文 那么直接在前面加b转成bytes类型'''
# 3.获取加密之后的密文数据
res = md5.hexdigest()
print(res) # 5d41402abc4b2a76b9719d911017c592
1.4.1 > 内容一致,加密结果一致
当传入的数据内容一致时,那么算法的结果肯定一致
import hashlib
md5.update(b'hello')
md5.update(b'world')
md5.update(b'jason')
print(md5.hexdigest()) # 8faebe82e744992e51c86845cac3e1b7
md5.update(b'helloworldjason')
print(md5.hexdigest()) # 8faebe82e744992e51c86845cac3e1b7
1.5 > 加密补充
1.5.1 > 解密本质
所谓的反解密其实是暴力破解>>>:反复的猜,解密内部本质如下:
md5解密内部本质
提前想好很多可能是密码的组合
123 自己加密
321 自己加密
222 自己加密
{'密文1':123,'密文2':321}
1.5.2 > 加盐处理
此操作就是增加一些额外的干扰项,主要是用于增加破解的难度,具体操作如下:
import hashlib
md5 = hashlib.md5()
md5.update('像破解先破解我吧'.encode('utf8'))
md5.update(b'123')
print(md5.hexdigest()) # 99f0c542b71c294e5300bb0748e2f712
1.5.3 > 动态加盐处理
此操作也是增加一些额外的干扰项,但是干扰项是动态变化的。可以是用户名的一部分,也可以是当前时间
1.6 > 加密的应用场景
1.6.1 > 密码加密如何比对
用户输入的还是明文但是到了程序里面之后会采用相同的加密算法变成密文
之后拿着密文与跟数据库里面的密文比对如果一致就是密码正确不一致就是错误
1.6.2 > 文件内容一致性校验
作为软件的提供者 我们在提供安全软件的同时会对给该软件内容做加密处理得到一个该安全软件独有的密文
用户在下载软件之后也会对内容做相同的加密之后比对两次密文是否一致
如果是表示中途没有被修改 如果不是表示中途被修改过 可能存在病毒
1.6.3 > 大文件的加密方法
如果一个文件有10G 那么如果全部读取并加密速度太慢
这个时候可以考虑对文件内容进行切片读取并加密的操作
2 > logging模块
该模块就是在程序的各个环境中记录 便于后续的查看
2.1 > 日志等级
日志按照重要程度分为五个级别:默认只有达到warning警告级别及以上才会记录日志,等级如下:
logging.debug('debug message') # 10
logging.info('info message') # 20
logging.warning('warning message') # 30
logging.error('error message') # 40
logging.critical('critical message') # 50
2.2 > 使用格式
该模块可以直接使用固定格式,如下:
import logging
file_handler = logging.FileHandler(filename='x1.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('代码进行了操作')