Day 29 _模块二 -hashlib_configparse_logging
一、hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:
import hashlib
md5_obj =hashlib.md5() #md5算法的对象
res = md5_obj.hexdigest() #获取摘要之后的结果
print(res,type(res))
# 输出结果:
# d41d8cd98f00b204e9800998ecf8427e <class 'str'>
user =input('user>>>')
passwd = input('password>>>')
md5_obj=hashlib.md5()
md5_obj.update(passwd.encode('utf-8'))
passwd =md5.obj.hexdigest()
if user =='alex' and passwd =='aee949757a2e698417463d47acac93df':
print('登录成功!')
md5_obj =hashlib.sha1()#实例化
#md5算法的对象
md5_obj.update(b'alex3714')#使用sha1 摘要算法对‘alex3714进行摘要’
res = md5_obj.hexdigest()#获取摘要后的结果
print(res,type(res))
# 输出结果为:8a003668a9c990f15148f9e4046e1410781533b6 <class 'str'>
#相同的字符串使用相同的算法, 在任何时候
#等等的结果都是一致的.
一.1 加盐操作
#全世界的md5算法都是一样的. # 全世界的md5算法都是一样的
# 123456 111111
md5_obj = hashlib.md5()
# md5算法的对象
md5_obj.update(b'') # 使用md5摘要算法对'alex3714'进行摘要
res = md5_obj.hexdigest() # 获取摘要之后的结果
print(res,type(res)) #aee949757a2e698417463d47acac93df 32位
# 123456 e10adc3949ba59abbe56e057f20f883e
# 撞库 #加盐
md5_obj = hashlib.md5('盐'.encode('utf-8'))
#md5算法的对象
md5_obj.update(b'alex3714')#使用md5 摘要算法对‘alex3714’进行摘要
res = md5_obj.hexdigest() #获取摘要后的结果
print(res,type(res))
# 打印结果 :0e249b9c16ea1d840ce700587cada978 <class 'str'>
动态加盐
username ='alex'
md5_obj = hashlib.md5(username.encode('utf-8')+'盐'.encode('utf-8'))
md5_obj.update(b'alex3714')
res =md5_obj.hexdigest()
print(res)
# 打印结果 :a106943dd5c1d5caf59bc80c05295ad6
校验文件一致性
#校验文件一致性
with open('userinfo','rb') as f :
md5_obj =hashlib.md5()
md5_obj.update(f.read())
res = md5_obj.hexdigest()
print(res)
#结果:84b2fe284833ac7903a7ac865e6c27a9 with open('userinfo','rb')as f:
md5_obj =hashlib.md5()
for line in f:
md5_obj.update(line) #update 操作可以在hexdigest之前执行多次
#分次对一个长字符串进行摘要
res = md5_obj.hexdigest() #结果是对一个厂字符串摘要的摘要结果.
print(res)
# 输出结果 :84b2fe284833ac7903a7ac865e6c27a9
拼接校验
# md5_obj = hashlib.md5()
# md5_obj.update(b'aaabbb')
# res = md5_obj.hexdigest()
# print(res) #6547436690a26a399603a7096e876a2d
#
# md5_obj = hashlib.md5()
# md5_obj.update(b'aa')
# md5_obj.update(b'abbb')
# res = md5_obj.hexdigest()
# print(res) #6547436690a26a399603a7096e876a2d
二、configparse
该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。
# .py 里面的所有值 都不需要进行转换或者处理 直接当做变量使用
#通用性不高
# 文本格式 key = value
# 都要进行文件处理 _ 通用
# ini
# [北京校区] # section
# 课程 = python,linux # option
# python讲师 = egon,yuanhao,nezha,boss_gold
# linux讲师 = 李导,何首乌
# [上海校区]
# 课程 = go,linux
# python讲师 = egon
# linux讲师 = 李导,何首乌
import configparser
config =configparser.ConfigParser()
#confi 是一个操作配置文件的对象
config['DEFAULT'] ={'ServerAliveInterval': '',
'Compression':'yes',
'CompressionLevel':'',
'ForwardX11':'yes'
}
config['bitbucket.org'] = {'User':'hg'}
config['topsecret.server.com'] ={'Host Port': '',
'ForwardX11':'no'
}
with open('example.ini','w')as configfile:
config.write(configfile)
结果为
configparese的操作方法
import configparser
config = configparser.ConfigParser()
config.read(('example.ini'))
print(config.sections())
# 打印结果 ['bitbucket.org', 'topsecret.server.com'] print('bytebong.com' in config)
#打印结果 False
print('bitbucket.org' in config)
#打印结果 True
print( config[ 'DEFAULT']['Compression']) #获取 setion里 option的值 yes
print(config['topsecret.server.com']['ForwardX11'])#获取 setion里option的值NO print(config['bitbucket.org'])#<Section: bitbucket.org> for key in config['bitbucket.org']:
print(key)
# 注意, 有default 会默认default的键
# user
# serveraliveinterval
# compression
# compressionlevel
# forwardx11 print(config.options('bitbucket.org'))
#打印结果 ['user', 'serveraliveinterval', 'compression', 'compressionlevel', 'forwardx11']
#同for循环,找到‘bitbucket.org'下所有键.
print(config.items('bitbucket.org'))
#找到 ’bitbucket.org'下所有键值对
# [('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', '9'), ('forwardx11', 'yes'), ('user', 'hg')]
print(config.get('bitbucket.org','compression'))
#结果 yes
# get方法section下的key对应的value
增删改查
# 增删改操作
import configparser
config = configparser.ConfigParser()
config.read('example.ini')
config.add_section('yuan')
config.remove_option('topsecret.server.com','forwardx11')
config.set('topsecret.server.com','k1','')
config.set('yuan','k2','')
config.write(open('new2.ini','w'))
三 、logging 操作日志的模块
什么叫日志
#给用户看的
用户的重要行为
登录 涉及隐私
账单 资金
#给开发和运维和测试人员看的
自测 logging.debug(‘一些中间结果’)
测试 1+++++1
运维
#记录
打印在屏幕上
写入文件里
#logging 的优势
格式更加规范
等级更加鲜明 3.1 简单的配置方法
import logging
logging.basicConfig(level=logging.ERROR,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt ='%a , %d %b %Y %H %M : %S',
filename ='test.log',
filemode ='a')
logging.debug('debug message')#调试
logging.info('info message')#信息
logging.warning("warning message")#警告
logging.error('error message') #错误
logging.critical('critical message') #严重错误
结果
Wed, 14 Mar 2018 17:18:17 1.py[line:23] ERROR error message
Wed, 14 Mar 2018 17:18:17 1.py[line:24] CRITICAL critical message
Wed , 14 Mar 2018 17 20 : 22 1.py[line:10] ERROR error message
Wed , 14 Mar 2018 17 20 : 22 1.py[line:11] CRITICAL critical message
Wed , 14 Mar 2018 17 20 : 22 1.py[line:23] ERROR error message
Wed , 14 Mar 2018 17 20 : 22 1.py[line:24] CRITICAL critical message
#使用logger对象的用法
import logging
#首先创造一个logger对象
logger =logging.getLogger()
#创建一个格式.
fmt =logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #创建一个 文件句柄 控制向那个文件中输出什么格式.
fh =logging.FileHandler('test3.log',encoding='utf-8')
fh.setFormatter(fmt)
#创建一个屏幕句柄 控制向屏幕输出 用什么格式
sh =logging.StreamHandler()
sh.setFormatter(fmt) #将logger对象和文件句柄,屏幕句柄绑在一起.
logger.addHandler(fh)
logger.addHandler(sh)
logger.setLevel(logging.DEBUG)#首先必须要整体对logger进行设置
sh.setLevel(logging.INFO)
fh.setLevel(logging.WARNING)
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')
输出结果
2018-03-14 18:47:13,752 - root - INFO - logger info message
2018-03-14 18:47:13,752 - root - WARNING - logger warning message
2018-03-14 18:47:13,752 - root - ERROR - logger error message
2018-03-14 18:47:13,752 - root - CRITICAL - logger critical message
Day 29 _模块二 -hashlib_configparse_logging的更多相关文章
- day09_雷神_模块二
day09 序列化之json 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊 ...
- NGINX模块(二)
[Nginx标准HTTP模块] 一.HTTP核心模块 指令1:alias 语法:alias file-path|directory-path; 默认值:no 使用字段:location 说明:这个指令 ...
- 稳定排序nlogn之归并排序_一维,二维
稳定排序nlogn之归并排序_一维,二维 稳定排序:排序时间稳定的排序 稳定排序包括:归并排序(nlogn),基数排序[设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排 ...
- python之爬虫_模块
目录 一.requests模块二.Beautifulsoup模块 一.requests模块 1.介绍 Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但 ...
- 常用模块二(hashlib、configparser、logging)
阅读目录 常用模块二 hashlib模块 configparse模块 logging模块 常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SH ...
- Python - 模块(二)
目录 Python - 模块(二) re re下面的方法 logging os Python - 模块(二) re re模块提供了正则表达式的相关操作 主要字符介绍: . 通配符,除了换行符之外的任意 ...
- 模块(二)os hashlib
模块(二)os hashlib 1.序列化模块 1.1 json 将满足条件的数据结构转化成特殊的字符串,并且可以反序列化转回去 # 两对方法 # 1 dumps() loads() ## 多用于网络 ...
- 模块二之序列化模块以及collections模块
模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...
- node基础(二)_模块以及处理乱码问题
一.前言 本次内容主要包括: 1.node.js中的模块系统 2.解决上篇中服务器响应的汉字乱码问题 二.知识 1.node中的模块 分为三种: 核心模块(node定义的如前面用到的fs,http ...
随机推荐
- ORA-22858: 数据类型的变更无效 varchar2类型转换为clob类型
今天遇到varchar2类型数据不够大,需改为clob类型.Oracle中,如果一个列的类型为varchar2,那么它不能直接转换为clob类型.可以通过间接的方式来修改. 就是把原来的字段删掉,重新 ...
- Spring框架中的工厂(了解)
1. ApplicationContext接口 * 使用ApplicationContext工厂的接口,使用该接口可以获取到具体的Bean对象 * 该接口下有两个具体的实现类 * ClassPathX ...
- OpenSSL编程
简介 OpenSSL是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算.非对称算法密钥生成 ...
- PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)
1069 微博转发抽奖(20 分) 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行 ...
- 谈谈我对Ui设计师的一些观点
做ui设计师3年多了,对ui设计师在工作中也了解了许多. 作为UI设计师,在工作中需要清楚了解设计的目的,尤其是你做的不是大众化产品,不能以个人认知.很强的主题性来确定. 例如针对儿童人群的app时, ...
- dumpbin 查看dll中的导出函数
C:\Program Files (x86)\Microsoft Visual Studio 14.0>dumpbin -exports E:\20171110\Release\aa.dll h ...
- 2017年值得一看的7个APP设计
新媒体时代蓬勃发展,各类APP如雨后春笋般出现.下载到合适的APP,不仅衣食住行一键搞定,甚至健身.社交.阅读等需求也能足不出户地满足.对于广大“吃瓜群众”来说,选择APP是个人需求以及跟随潮流的选择 ...
- 在EF中使用MySQL的方法及常见问题
有时需要在网上租用空间或数据库,Mysql成本低一些,所以想将sql server转成mysql…… 注意:在安装Mysql时要选择文字集为utf8,否则将不能使用中文(当前也可以在创建数据库时使用u ...
- 2018.08.01 BZOJ4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
传送门 线段树简单题. 二分答案+线段树排序. 实际上就是二分答案mid" role="presentation" style="position: relat ...
- 修改Python IDLE代码配色及语法高亮主题
初学Python,想必大家拿来练习最多的IDE就是Python自带的IDLE了,但是默认的代码配色及语法高亮主题确实很不适应,所以我们需要做个小小的美化,比如像下面这样我做的美化配置: HOW TO ...