1.hashlib 模块:
由于数据的不安全性,为了保证用户的信息绝对安全,所有所有人的账号密码不能以明文的形式存储,
而是经过适当的处理以密文的形式存储.
hashlib对同一个字符串在不同的语言,不同的环境(操作系统,版本,时间)中加密得到的是同一个密文串,不同的字符串得到的密文是不一样的
这个算法不可逆
2.摘要算法:
# 原始加密: import hashlib obj = hashlib.md5() obj.update('666'.encode('utf-8')) print(obj.hexdigest()) # 加盐 obj = hashlib.md5('123'.encode('utf-8')) obj.update('666'.encode('utf-8')) print(obj.hexdigest()) # 动态加盐 ,避免恶意撞库 name = 'liming' pwd = '123456' def login(name,passwd): obj = hashlib.md5(name.encode('utf-8')) obj.update(pwd.encode('utf-8')) ret = obj.hexdigest() with open('t1',) as f: for line in f: uname,paswd = line.strip().split() if name == uname and paswd == ret: return True else: return False rot = login(name,pwd)
3.hashlib摘要算法,多种算法中常用的两种md5,sha1.
md5是32位16进制的数字字符组成的字符串
特点:应用最广泛的摘要算法.
效率高,相对不复杂,安全性也相对低
sha1及其相关系列摘要算法,40位16进行的数字字符组成的字符串.
特点:比md5算法复杂,且sha的n值越大,算法越复杂,耗时越久,效率越低,安全性越高
4.文件的一致性校验:
下载的是视频,或者大文件,应该以rb的形式来读,读出来的都是bytes
不能按行来读,也不能一次性读出来:
import os import hashlib path = r'E: 1_pycharmvenvsum_01_python.py' def sum_size(path,buffer=1024): obj = hashlib.md5() s_size = os.path.getsize(path) with open(path, 'rb') as f: while s_size: count = f.read(buffer) s_size -= len(count)#d41d8cd98f00b204e9800998ecf8427e ret = obj.hexdigest() return ret osd = sum_size(path) print(osd)
5.configparser 文件配置
6.logging日志:
1,给用户看:购物记录'''
2.给内部人员看:程序出错时帮记录过程,排除错误
3,给非技术看:谁在什么时候做了什么操作
7.日志级别:
import logging logging.basicConfig(level=logging.INFO) #调节日志打印级别 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.INFO,format='%(asctime)s %(filename)s [line:%(lineno)d]%(levelname)s%(message)s', datefmt = '%c', filename ='test.log') logging.warning('warning message') #警告操作 logging.error('error message') # logging.info('错误操作')
对象的配置:向文件和屏幕输出内容
# 先创建一个log对象 logger logger = logging.getLogger() logger.setLevel(logging.DEBUG) # 还要创建一个控制文件输出的文件操作符 fh = logging.FileHandler('mylog.log') # 还要创建一个控制屏幕输出的屏幕操作符 sh = logging.StreamHandler() # 要创建一个格式 fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fmt2 = logging.Formatter('%(asctime)s - %(name)s[line:%(lineno)d] - %(levelname)s - %(message)s') # 文件操作符 绑定一个 格式 fh.setFormatter(fmt) # 屏幕操作符 绑定一个 格式 sh.setFormatter(fmt2) sh.setLevel(logging.WARNING) # logger对象来绑定:文件操作符, 屏幕操作符 logger.addHandler(sh) logger.addHandler(fh)