1. 程式人生 > >hashlib模塊,configparse模塊,logging模塊

hashlib模塊,configparse模塊,logging模塊

等號 發送 parser sha算法 是否 登陸 value eight Coding

#################hashlib加密模塊############################


#登陸 md5 sha

  #密碼不能用使用文字存儲
  #密文存儲 摘要算法
#校驗文件的一致性, md5
  #網絡的上傳下載功能
  #保證多臺服務器狀態
#摘要算法:
import hashlib
#
has = hashlib.md5()
has.update(bxx169..)# 使用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(balex114) #
使用sha1 摘要算法對‘alex114‘進行摘要 ret = md51.hexdigest() #獲取摘要到的結果 print(ret) #結果==837db908c104b4818ef0289cdf049adeb5b85673
md5_obj = hashlib.md5()
md5_obj.update(baaabbb)
res = md5_obj.hexdigest()
print(res)  #6547436690a26a399603a7096e876a2d

md5_obj = hashlib.md5()
md5_obj.update(baa)
md5_obj.update(babbb
) 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(bxzx16..)
passwd = md2.hexdigest()
if user == alex and passwd ==6e0ba85efb3a9ecce7398136471ed425:
    print(ok)
else:
    print(no)

import hashlib
md5_obj = hashlib.md5()
# md5算法的對象
md5_obj.update(bxz69..)  # 使用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(bxzx1966)
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模塊