一、hashlib & hmac # 对字符加密

将二进制进行编码

import hashlib

md5

m = hashlib.md5()
t = b'happy'
t1 = 'happy'.encode('utf-8')
print(t)
print(t1)
m.update(t)
print(m, type(m), m.hexdigest())
b'happy'
b'happy'
<md5 _hashlib.HASH object @ 0x0000028040E823F0> <class '_hashlib.HASH'> 56ab24c15b72a457069c5ea42fcfc640

1.只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验

2.不能由hash值返解成内容,即可以保证非明文密码的安全性

3.只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理

4.如果使用同一个哈斯字符编码表,不断使用哈希会累加

m = hashlib.md5()

m.update('hello'.encode('utf8'))
print(m.hexdigest())
m.update('hash'.encode('utf8'))
print(m.hexdigest())

m2 = hashlib.md5()
m2.update('hellohash'.encode('utf8'))
print(m2.hexdigest())
m2.update('hello'.encode('utf8'))
print(m2.hexdigest())

m3 = hashlib.md5()
m3.update('hello'.encode('utf8'))
print(m3.hexdigest())
5d41402abc4b2a76b9719d911017c592
97fa850988687b8ceb12d773347f7712
97fa850988687b8ceb12d773347f7712
d75ff24e34148b7c0299720ed4e04e46
5d41402abc4b2a76b9719d911017c592

hmac:new相同的情况下输入也相同

import hmac
m = hmac.new(b'asd', digestmod=hashlib.md5)
m.update(b'123')
print(m.hexdigest())
m = hmac.new(b'asd123', digestmod=hashlib.md5)
print(m.hexdigest())
7f8f78e4452bf540fc13002a7b96344e
d517707a22188ac5519467d691b31d5b

二、logging #日志

import logging

v1

logging.debug('调试信息')
logging.info('正常信息')
logging.warning('警告信息')
logging.error('报错信息')
logging.critical('严重错误信息')
WARNING:root:警告信息
ERROR:root:报错信息
CRITICAL:root:严重错误信息

v2

basicConfig # 一次性配置

logging.basicConfig() 在一个程序生命周期中,只有在第一次被调用时才会生效。后续的所有调用都会被完全忽略。

import logging
logging.basicConfig(filename=r'D:桌面\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('调试信息')  # 10
logging.info('正常信息')  # 20
logging.warning('警告信息')  # 30
logging.error('报错信息')  # 40
logging.critical('严重错误信息')  # 50

%(name)s Logger的名字

%(levelno)s 数字形式的日志级别

%(levelname)s 文本形式的日志级别

%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有

%(filename)s 调用日志输出函数的模块的文件名

%(module)s 调用日志输出函数的模块名

%(funcName)s 调用日志输出函数的函数名

%(lineno)d 调用日志输出函数的语句所在的代码行

%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d 线程ID。可能没有

%(threadName)s 线程名。可能没有

%(process)d 进程ID。可能没有

%(message)s用户输出的消息

v3

Logger #产生日志

logger = logging.getLogger(__file__)

HandLer #接受Logger传来的日志,用于储存要打印到的地方

h1 = logging.FileHandler(r'D:\桌面\t1.log')
h2 = logging.FileHandler(r'D:\桌面\t2.log')
sm = logging.StreamHandler()  # 打印到终端

Formatter#储存日志格式

formmater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p',)

formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p',)

formmater3 = logging.Formatter('%(name)s %(message)s',)

setFormatter#为Handler对象绑定格式

h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
sm.setFormatter(formmater3)

addHandler#将Handler添加给logger并设置日志级别

logger.addHandler(h1)
logger.addHandler(h2)
logger.addHandler(sm)

setLevel设置日志级别

logger.setLevel(30)  # Logger:第一层过滤
h1.setLevel(10)  # handLer:第二层过滤,不同输出做区分
h2.setLevel(10)
sm.setLevel(10)

posted on 2025-08-13 14:22  新月绘影  阅读(4)  评论(0)    收藏  举报