一、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)
浙公网安备 33010602011771号