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 ...
随机推荐
- WebBrowser-Javascript与C++互操作
WebBrowser控件是Microsoft提供的一个用于网页浏览的客户端控件,WebBrowser控件的使用相当广泛,例如很多邮件客户端都是使用可编辑的WebBrowser控件作为写邮件的工具,也有 ...
- Golang之时间格式化,计时器
地鼠敲下一堆代码,记录着当天的时间 package main import ( "fmt" "time" ) func getTime() { now := t ...
- Object类中通用方法之:toString()方法
1.Java所有的对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法称为通用方法 2.toString()方法即为Object类中定义的通用方法之一 3.平时我们如果在控制台直接打 ...
- PAT 1047 编程团体赛(代码)
1047 编程团体赛(20)(20 分) 编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出 ...
- 欲哭无泪的p-value = 0.051 | 做几次重复能得到较低的p-value
欲哭无泪的p-value = 0.051 | 做几次重复能得到较低的p-value 已有 1469 次阅读 2017-12-15 14:12 |个人分类:RNA-seq|系统分类:科普集锦|关键词:R ...
- Codeforces 612B. Wet Shark and Bishops 模拟
B. Wet Shark and Bishops time limit per test: 2 seconds memory limit per test: 256 megabytes input: ...
- 21个ui设计技巧,让你的设计不落伍
1.功能性极简主义 不少移动端APP和网站开始基于极简主义设计风来设计,而极简主义本身并非关注所有的信息,而是通过减少非关键信息来突出特定的内容,它是有着极强的功能性和偏向的.它有着如下的特征: ・简 ...
- 怎样完整地离线更新并升级基于 Debian 的操作系统
不久之前我已经向你展示了如何在任意离线的 Ubuntu 和 Arch Linux 操作系统上安装软件. 今天,我们将会看看如何完整地离线更新并升级基于 Debian 的操作系统. 和之前所述方法的不同 ...
- struts2值栈ValueStack中都有哪些东西?
com.opensymphony.xwork2.dispatcher.HttpServletRequest application com.opensymphony.xwork2.dispatcher ...
- part1:15-安装Linux系统到开发板
1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...