hashlib模塊,configparse模塊,logging模塊
阿新 • • 發佈:2018-03-15
等號 發送 parser sha算法 是否 登陸 value eight Coding
#################hashlib加密模塊############################
#登陸 md5 sha
#密碼不能用使用文字存儲
#密文存儲 摘要算法
#校驗文件的一致性, md5
#網絡的上傳下載功能
#保證多臺服務器狀態
#摘要算法:
import hashlib
#
has = hashlib.md5()
has.update(b‘xx169..‘)# 使用md5摘要算法對‘alex3714‘進行摘要
ret = has.hexdigest() #獲取摘要之後的結果
print(ret) #538fced34767a51934e1ebdc2e841da4
#
user = input(‘user:‘)
passwd = input(‘passwd:‘)
md5 = hashlib.md5()
md5.update(passwd.encode(‘utf-8‘))
passwd = md5.hexdigest()
if user ==‘alex‘ and passwd == ‘538fced34767a51934e1ebdc2e841da4‘:
print(‘登陸成功‘)
else:
print(‘密碼錯誤‘)
md51 = hashlib.sha1()
#sha算法
md51.update(b‘alex114‘) # 使用sha1 摘要算法對‘alex114‘進行摘要
ret = md51.hexdigest() #獲取摘要到的結果
print(ret) #結果==837db908c104b4818ef0289cdf049adeb5b85673
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 相同的字符串使用相同的選法 在任何時候 得到的結果都是一致的
只要在res = md5_obj.hexdigest()這個之前的摘要出來的值都是一樣
#加鹽算法
# mdl = hashlib.md5(‘xx169..‘.encode(‘utf-8‘)+‘xx169..‘.encode(‘utf-8‘))
# mdl.update(b‘xzx199669..‘) #給這個字符串密碼摘要出來的加上‘鹽‘的
# res = mdl.hexdigest()
# print(res) #加鹽後 == 9db2029ebe5d89a2948232db4760f917
# #加鹽進階 409c14adcdd9e6ca7344d4b3b6f9b1b2
user = input(‘user:‘)
passwd = input(‘passwd:‘)
md2 = hashlib.md5(passwd.encode(‘utf-8‘)+passwd.encode(‘utf-8‘)) #動態雙重加鹽
md2.update(b‘xzx16..‘)
passwd = md2.hexdigest()
if user == ‘alex‘ and passwd ==‘6e0ba85efb3a9ecce7398136471ed425‘:
print(‘ok‘)
else:
print(‘no‘)
import hashlib
md5_obj = hashlib.md5()
# md5算法的對象
md5_obj.update(b‘xz69..‘) # 使用md5摘要算法對‘alex3714‘進行摘要
res = md5_obj.hexdigest() # 獲取摘要之後的結果
print(res,type(res)) #538fced34767a51934e1ebdc2e841da4 32位
#校驗文件的一致性
with open(‘sha1.log‘,‘rb‘)as f:
md2 = hashlib.md5(‘sex‘.encode(‘utf-8‘)) #文化也可以實行加鹽
md2.update(f.read())
r1 = md2.hexdigest()
print(r1) #sha1.log的摘要是==9b517904a0281546ef51a0205e949358 and 加鹽==cac879244551bc96359e002a8f967a22
# #校驗文件放法2
#
with open(‘sha1.log‘,‘rb‘)as f:
md2 =hashlib.md5(‘sex‘.encode(‘utf-8‘)) #文件加鹽後
for line in f:
md2.update(line) ## update操作可以在hexdigest之前執行多次
#分次對一個長字符串進行摘要
r2 = md2.hexdigest()
print(r2) #cac879244551bc96359e002a8f967a22
#hashlib.sh1()的摘要
ha = hashlib.sha1()
ha.update(b‘xzx1966‘)
ret1 = ha.hexdigest()
print(ret1)
#################configparser。init類文件操作#################
####################configparser。init類文件操作############################
####################configparser。init類文件操作############################
#可以當作一個字典的方式來操作
#######寫入#######
import configparser
config =configparser.ConfigParser() #config 創建這個對象用來操作文件
#給config 這個對象寫入組 和成員
config[‘DEFAULT‘] ={‘server‘:‘45‘,‘Compression‘:‘yes‘,‘Comperssionlevel‘:‘9‘,‘Forwardell‘:‘ok‘}
config[‘bitbucket.org‘] ={‘user‘:‘hg‘}
config[‘Topsecret.server.com‘] = {‘host‘:‘25000‘,‘Forwardell‘:‘no‘}
with open(‘example.ini‘, ‘w‘) as configfile: #打開example.ini這個文件後w寫入
config.write(configfile) #給config 這個對象把 configfile文件句柄傳入禁區
##############
########讀取文件內容#########
import configparser
configr= configparser.ConfigParser
config.read(‘example.ini‘)
print(config.sections()) #查看config這個組中的成員信息 但是看不到DEFAULT裏面的需要另一個辦法
print(‘Topsecret.server.com‘ in config) #判斷一個祖名是否在config這個對象的大組裏面,返回True, False
print(config[‘DEFAULT‘][‘server‘]) #取DEFAULT這個關鍵字組中成員對於的值 相當於字典的value
print(config[‘Topsecret.server.com‘][‘host‘]) #查看祖名,組成員的對於值
# print(config[‘bitbucket.org‘]) #輸出結果==<Section: bitbucket.org> 查看一個組他是一個可叠代的組 所以得for一下
for i in config[‘bitbucket.org‘]: #循環 config這個對象中[‘bitbucket.org‘] 這個組是個可叠代的 返回了成員等號左邊的key
print(i)
# print(config.options(‘Topsecret.server.com‘))
# print(config.items(‘Topsecret.server.com‘)) #返回一個列表套元祖的 字典鍵值對
print(config.get(‘Topsecret.server.com‘,‘host‘)) #get 方法去 一個組名中取組成員key的值
###增刪改查########
import configparser #導入模塊
confi = configparser.ConfigParser() #寫入模塊規範
confi.read(‘example.ini‘) #讀取example。ini這個文件
confi.add_section(‘yuan‘) #給config這個大字典加入一個"yuan"組
confi.remove_option(‘bitbucket.org‘)
confi.remove_option(‘Topsecret.server.com‘,‘forwardell‘)
#################loging日誌模#####################
用於便捷記錄日誌且線程安全的模塊
日誌等級:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
只有【當前寫等級】大於【日誌等級】時,日誌文件才被記錄。
# 定義文件
file_1_1 = logging.FileHandler(‘l1_1.log‘, ‘a‘, encoding=‘utf-8‘)
fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")
file_1_1.setFormatter(fmt)
file_1_2 = logging.FileHandler(‘l1_2.log‘, ‘a‘, encoding=‘utf-8‘)
fmt = logging.Formatter()
file_1_2.setFormatter(fmt)
# 定義日誌
logger1 = logging.Logger(‘s1‘, level=logging.ERROR)
logger1.addHandler(file_1_1)
logger1.addHandler(file_1_2)
# 寫日誌
logger1.critical(‘1111‘)
# 定義文件
file_2_1 = logging.FileHandler(‘l2_1.log‘, ‘a‘)
fmt = logging.Formatter()
file_2_1.setFormatter(fmt)
# 定義日誌
logger2 = logging.Logger(‘s2‘, level=logging.INFO)
logger2.addHandler(file_2_1)
- 當使用【logger1】寫日誌時,會將相應的內容寫入 l1_1.log 和 l1_2.log 文件中
- 當使用【logger2】寫日誌時,會將相應的內容寫入 l2_1.log 文件中
操作longing日誌列子:
#logging記錄代碼日誌模塊
logging庫提供了多個組件:Logger、Handler、Filter、Formatter。Logger對象提供應用程序可直接使用的接口,Handler發送日誌到適當的目的地,Filter提供了過濾日誌信息的方法,Formatter指定日誌顯示格式。另外,可以通過:logger.setLevel(logging.Debug)設置級別,當然,也可以通過fh.setLevel(logging.Debug)單對文件流設置某個級別
import logging
#
logger = logging.getLogger()
#當前時間 #當前模塊名 #當等級 當前信息
fm = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)
#創建一個文件句柄 控制向那個文件中輸出,用什麽格式,以及等級
fh = logging.FileHandler(‘sha1.log‘,encoding=‘utf-8‘)
fh.setFormatter(fm)
#創建一個屏幕句柄 控制向屏幕輸出 用什麽格式 等級
sh = logging.StreamHandler() #向屏幕輸出
sh.setFormatter(fm) #讓屏幕輸出和文件輸出放在一起
#將logger對象文件句柄和屏幕句柄綁定在一起
logger.addHandler(fh)
logger.addHandler(sh)
logger.setLevel(logging.INFO) #只輸出info以上加info4個信息 debug不顯示
logger.debug(‘1 logger debug message‘) #調試自用
logger.info(‘2 logger info message‘) #信息
logger.warning(‘3 logger warning nessage‘) #警告
logger.error(‘4 logger error message‘) #錯誤
logger.critical(‘5 logger critical message‘) #嚴重錯誤
hashlib模塊,configparse模塊,logging模塊