'''import logging# 1. 控制日志级别# 2. 控制日志格式# 3. 控制输出的目标为文件logging.basicConfig(filename='access.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10, )logging.debug('debug日志') # 10logging.info('info日志') # 20logging.warning('warning日志') #30logging.error('error日志')#40logging.critical('critical日志') #50# 火警的级别# 大功率电器# 抽烟# 烧烤# 自焚# 炸 药包'''# 1. 可以同时往终端与文件中记录日志# 2. 可以修改字符串编码import logging# 1. logger对象: 负责生产各类级别的日志logger1 = logging.getLogger('用户交易') # 日志名用来标识日志的与什么业务有关# 2. filter对象: 过滤日志# 3. handler对象: 控制日志输出目标位置fh1 = logging.FileHandler('a1.log',encoding='utf-8')fh2 = logging.FileHandler('a2.log',encoding='utf-8')ch = logging.StreamHandler()# 4. formmater对象formatter1 = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p')formatter2 = logging.Formatter( fmt='%(asctime)s - %(levelname)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p')# 5. 绑定logger对象与handler对象logger1.addHandler(fh1)logger1.addHandler(fh2)logger1.addHandler(ch)# 6. 绑定handler对象与formatter对象fh1.setFormatter(formatter1)fh2.setFormatter(formatter1)ch.setFormatter(formatter2)# 7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,一般两者级别相同logger1.setLevel(10)fh1.setLevel(10)fh2.setLevel(10)ch.setLevel(10)# 8. 使用logger对象产生日志logger1.info('alex给egon转帐1个亿')""" hash lib hash是一种算法 是将一个任意长的数据 根据计算 获得一个固定长度特征码 特征: 不一样输入 可能会有相同的结果 概率特别小 相同的输入 必然获得相同结果 因为散列(特征)的性质 从原理来看是不可能 反解 用来 验证 两个输入的数据是否一致 使用场景 1.密码验证 123321 jahsajshajhsjahjas client 加密后结果 server 拿到加密后 2.验证数据是否被篡改 好比游戏安装包 有没有被改过 为了防止别人撞库成功 可用提高密码的复杂度 其次能够为密码加盐 (加点内容进去)"""# ====================================================import hashlibm = hashlib.md5("aaa".encode("utf-8"))print(len(m.hexdigest()))# 撞库破解的原理 有人事先 把常见的 明文和密文的对应关系 存到了数据库中# 运气好就能查询到pwds = {"aaa":"47bce5c74f589f4867dbd57e9ca9f808"}h1 = hashlib.sha512("123".encode("utf-8"))h2 = hashlib.sha3_512("123".encode("utf-8"))# print(len(h.hexdigest()))print(h1.hexdigest())print(h2.hexdigest())# 2b70683ef3fa64572aa50775acc84855# 加盐m = hashlib.md5("321".encode("utf-8"))#加m.update("abcdefplkjoujhh".encode("utf-8"))print(m.hexdigest())import hmac# 没啥区别 只是在建立的时候必须加盐,了解h = hmac.new("abcdefjjjj".encode("utf-8"))h.update("123".encode("utf-8"))print(h.hexdigest())