博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
28 hashlib 模块 logging 模块 和 configparser模块 functools模块的偏函数partial
阅读量:5237 次
发布时间:2019-06-14

本文共 3510 字,大约阅读时间需要 11 分钟。

 

主要内容:

1 . hashlib 模块 : 摘要算法的模块

  定义: 能够把一个字符串数据类型的变量转换成一个定长的密文的字符串,字符串里的每一个字符都是一个十六进制数字.

  算法 : 对于同一个字符串,用相同的算法,相同的手段去进行摘要获得的值总是相同的.

  a : md5 是一个算法, 32位的字符串 ,每个字符串都是一个十六进制.(效率高,算法相对简单)

import hashlibs = 'lilv'md5_obj = hashlib.md5()md5_obj.update(s.encode('utf-8'))re1 = md5_obj.hexdigest()print(re1)

  b: sha1算法: 40位的字符串 , 每一个字符都是一个16进制.算法相对复杂,计算速度也慢.

md5_obj = hashlib.sha1()md5_obj.update(s1.encode('utf-8'))res = md5_obj.hexdigest()print(res,len(res),type(res))

  c : 校验问题

  文件的一致性校验:

md5_obj = hashlib.md5()with open('5.序列化模块_shelve.py','rb') as f:    md5_obj.update(f.read())    ret1 = md5_obj.hexdigest()md5_obj = hashlib.md5()with open('5.序列化模块_shelve.py.bak','rb') as f:    md5_obj.update(f.read())    ret2 = md5_obj.hexdigest()print(ret1,ret2)

 d: MD5算法

登录的密文验证

字符串 --> 密文 , ,密文与字符串之间是不可逆的.

lily --->aee949757a2e698417463d47acac93df

s1 = '123456'md5_obj = hashlib.md5()md5_obj.update(s1.encode('utf-8'))res = md5_obj.hexdigest()print(res,len(res),type(res))

会出现数据库撞库的现象.黑客可以根据反推的方式推测出用户的密码,所以引入了加任意的盐.

加盐  # alex3714  d3cefe8cdd566977ec41566f1f11abd9md5_obj = hashlib.md5('任意的字符串作为盐'.encode('utf-8'))md5_obj.update(s1.encode('utf-8'))res = md5_obj.hexdigest()print(res,len(res),type(res))

动态加盐的方式,即每个用户的一个属性作为盐,那么想要破解密码,每个用户都需要用一个库去比较,大大增加了破解所有账户的难度。

username = input('username : ')passwd = input('password : ')md5obj = hashlib.md5(username.encode('utf-8'))md5obj.update(passwd.encode('utf-8'))print(md5obj.hexdigest())

2. configparser模块

3. logginng模块

  a : 功能 :日志格式的规范   ;  操作的简化 ;  日志的分级管理

  b: 不能帮你做的事情 :自动生成你要打印的内容; 在哪些地方需要打印,要打印的内容是什么,内容的级别.

  c : logging模块的使用 : 普通配置型  简单的 可定制性差

             对象配置型  复杂的 可定制性强

  d : 认识日志的分级:    默认打印123个

import logginglogging.debug('debug message')      # 调试模式     5logging.info('info message')        # 基础信息     4logging.warning('warning message')  # 警告         3logging.error('error message')      # 错误         2logging.critical('critical message')# 严重错误    1

    加了一个参数: leval = DEBUG全部显示.(可以输出屏幕)

import logginglogging.basicConfig(level=logging.DEBUG)logging.debug('debug message')      # 调试模式logging.info('info message')        # 基础信息logging.warning('warning message')  # 警告logging.error('error message')      # 错误logging.critical('critical message')# 严重错误

    写入文件

import logginglogging.basicConfig(level=logging.DEBUG,                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',                    datefmt='%a, %d %b %Y %H:%M:%S',                    filename='test.log')logging.debug('debug message')      # 调试模式logging.info('info message')        # 基础信息logging.warning('warning message')  # 警告logging.error('error message')      # 错误logging.critical('critical message')# 严重错误

  e : basicConfig:不能将一个log信息既输出到屏幕 又输出到文件logger对象的形式来操作日志文件  

import logging# 创建一个logger对象logger = logging.getLogger()# 创建一个文件管理操作符fh = logging.FileHandler('logger.log',encoding='utf-8')# 创建一个屏幕管理操作符sh = logging.StreamHandler()# 创建一个日志输出的格式format1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 文件管理操作符 绑定一个 格式fh.setFormatter(format1)# 屏幕管理操作符 绑定一个 格式sh.setFormatter(format1)logger.setLevel(logging.DEBUG)# logger对象 绑定 文件管理操作符logger.addHandler(fh)# logger对象 绑定 屏幕管理操作符logger.addHandler(sh)

4 functools 模块

  偏函数partial

  偏函数: 制定一个默认参数, 包装成另外一个参数. 

print(int("10000", base=2))print(int("1000", base=2))print(int("100", base=2))print(int("10", base=2))# 可以写成下面的格式int2 = partial(int, base=2)print(int2("10000"))print(int2("1000"))print(int2("100"))print(int2("10"))

  

  

 

转载于:https://www.cnblogs.com/gyh412724/p/9452023.html

你可能感兴趣的文章
网络时间获取
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Code as IaaS for Azure : Terraform 初步
查看>>
WebFrom 小程序【分页功能 】
查看>>
Learning-Python【26】:反射及内置方法
查看>>
day7--面向对象进阶(内含反射和item系列)
查看>>
Python深入01 特殊方法与多范式
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
转:apache 的mod-status
查看>>
转:基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示
查看>>
结对编程博客
查看>>
Kendo MVVM 数据绑定(四) Disabled/Enabled
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
C++11 生产者消费者
查看>>
IO multiplexing 与 非阻塞网络编程
查看>>
hdu4105  Electric wave
查看>>