sha加密:算法加密
import hashlib
sha = hashlib.sha1()
sha.update(b‘alec8868‘) #必须转换成bytes类型
print(sha.hexdigest())
#sha 算法随着算法复杂程度的增加,对比的时间增加和占用内存
MD5加密:非常普遍的算法
#例子:用户登录:用文件中的md5加密和用户输入的密码比对
import hashlib
user = input(‘username:‘)
pwd = input(‘password:‘)
with open(‘db.txt‘,‘r‘,encoding=‘utf-8‘)as f:
for line in f:
usr,password,role = line.split(‘|‘)
md5 = hashlib.md5()
md5.update(bytes(pwd,encoding=‘utf-8‘)) #必须用bytes类型
md5_pwd = md5.hexdigest()
if usr == user and md5_pwd == password:
print(‘登录成功‘)
else:
print(‘登录失败!‘)
加严MD5加密:静态方式
import hashlib
md5 = hashlib.md5(bytes(‘aeiou‘,encoding=‘utf-8‘)) #加严
md5.update(b‘li456‘)
print(md5.hexdigest())
加严MD5加密:动态方式(目前最严格的加严方式)
import hashlib
user = input(‘username:‘)
pwd = input(‘password:‘)
md5 = hashlib.md5(bytes(‘aeiou‘,encoding=‘utf-8‘) + bytes(user[2:],encoding=‘utf-8‘)) #可以用用户名的某一个字段来加严
md5.update(b‘li456‘)
print(md5.hexdigest())
#注册+登录
import hashlib
def pwd_md5(user,pwd):
md5 = hashlib.md5(bytes(‘aeiou‘,encoding=‘utf-8‘) + bytes(user[2:],encoding=‘utf-8‘))
md5.update(bytes(pwd,encoding=‘utf-8‘))
return md5.hexdigest()
user_in = input(‘username:‘)
pwd_in = input(‘password‘)
md5_pwd = pwd_md5(user_in,pwd_in)
with open(‘db.txt‘,‘a+‘,encoding=‘utf-8‘)as f1:
f1.write(‘%s|%s|%s\n‘%(user_in,md5_pwd,‘Teacher‘))
print(‘注册成功‘)
print(‘------------登录-------------‘)
user = input(‘username:‘)
pwd = input(‘pwd:‘)
result = pwd_md5(user,pwd)
flag = False
with open(‘db.txt‘,‘r‘,encoding=‘utf-8‘)as f2:
for line in f2:
use,pawd,roid = line.split(‘|‘)
if user == use and result == pawd:
flag = True
if flag:
print(‘登录成功‘)
else:
print(‘登录失败‘)
md5分次加密,一般用在大文件校验上,多次读取
import hashlib
md5 = hashlib.md5
md5.update(b‘liya‘)
md5.update(b‘nan‘) #可以分次加密
print(md5.hexdigest()) #结果和liyanan加密结果一致
应用场景:
警告级别:
import logging
logging.debug(‘debug message‘) #低级别:排错信息,默认不显示
logging.info(‘info message‘) #正常信息,默认不显示
logging.warning(‘warning message‘) #警告信息,默认显示
logging.error(‘error message‘) #错误信息,默认显示
logging.critical(‘critical message‘)#最高级别:严重错误信息,默认显示
import logging
logging.basicConfig(level = logging.DEBUG, #定制显示debug级别以上的所有告警
format=‘%(asctime)s %(filename)s[line:%(lineno)d]s %(levelname)s %(message)s‘,
datefmt=‘%a,%d %b %Y %H:%M:%S‘,
filename=‘test.log‘, #输出到文件中
filemode=‘a‘ #默认为a或w形式写入文件
)
选择日志输出到log文件上
import logging
logger = logging.getLogger() #选择日志输出
fh = logging.FileHandler(‘log.log‘,encoding=‘utf-8‘) #打开日志文件
formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)#定制输出格式
# 设置告警级别:默认为warning
# sh.setLevel(logging.ERROR) #只能设置warning以上的告警级别
# logging.root.setLevel(logging.INFO) #使用root设置告警级别,5级全部可设置
#把以上三个句柄绑定串联在一起
#第一步:先将文件操作符 和 格式 关联
fh.setFormatter(formatter)
#第二步:再将logger对象 和 文件操作符 关联
logger.addHandler(fh)
logging.debug(‘debug message‘)
logging.info(‘info message‘)
logging.warning(‘警告信息‘)
logging.error(‘error message‘)
logging.critical(‘critical message‘)
选择日志输出到屏幕上(可与输出到文件上同时使用,注意变量名对应关系)
import logging
logger = logging.getLogger() #选择日志输出
sh = logging.StreamHandler() #创建一个屏幕控制对象
formatter2 = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s [line:%(lineno)d] - %(message)s‘)#定制输出格式
# 设置告警级别:默认为warning
# sh.setLevel(logging.ERROR) #只能设置warning以上的告警级别
# logging.root.setLevel(logging.INFO) #使用root设置告警级别,5级全部可设置
sh.setFormatter(formatter2) #将文件操作符 和 格式关联
logger.addHandler(sh) #再将logger对象与文件操作符关联
logging.debug(‘debug message‘)
logging.info(‘info message‘)
logging.warning(‘警告信息‘)
logging.error(‘error message‘)
logging.critical(‘critical message‘)
python笔记(22)--hashlib和logging模块详解
原文:https://www.cnblogs.com/lynlearnde/p/12938813.html