'''import logging# 1. 控制日誌級別# 2. 控制日誌格式# 3. 控制輸出的目標爲文件logging.basicConfig(filename='access.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10, )logging.debug('debug日誌') # 10logging.info('info日誌') # 20logging.warning('warning日誌') #30logging.error('error日誌')#40logging.critical('critical日誌') #50# 火警的級別# 大功率電器# 抽菸# 燒烤# 自焚# 炸 藥包'''# 1. 可以同時往終端與文件中記錄日誌# 2. 可以修改字符串編碼import logging# 1. logger對象: 負責生產各類級別的日誌logger1 = logging.getLogger('用戶交易') # 日誌名用來標識日誌的與什麼業務有關# 2. filter對象: 過濾日誌# 3. handler對象: 控制日誌輸出目標位置fh1 = logging.FileHandler('a1.log',encoding='utf-8')fh2 = logging.FileHandler('a2.log',encoding='utf-8')ch = logging.StreamHandler()# 4. formmater對象formatter1 = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p')formatter2 = logging.Formatter( fmt='%(asctime)s - %(levelname)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p')# 5. 綁定logger對象與handler對象logger1.addHandler(fh1)logger1.addHandler(fh2)logger1.addHandler(ch)# 6. 綁定handler對象與formatter對象fh1.setFormatter(formatter1)fh2.setFormatter(formatter1)ch.setFormatter(formatter2)# 7. 設置日誌級別,有logger對象與handler對象兩層關卡,必須都放行最終日誌纔會放行,一般兩者級別相同logger1.setLevel(10)fh1.setLevel(10)fh2.setLevel(10)ch.setLevel(10)# 8. 使用logger對象產生日誌logger1.info('alex給egon轉帳1個億')""" hash lib hash是一種算法 是將一個任意長的數據 根據計算 獲得一個固定長度特徵碼 特徵: 不一樣輸入 可能會有相同的結果 概率特別小 相同的輸入 必然獲得相同結果 因爲散列(特徵)的性質 從原理來看是不可能 反解 用來 驗證 兩個輸入的數據是否一致 使用場景 1.密碼驗證 123321 jahsajshajhsjahjas client 加密後結果 server 拿到加密後 2.驗證數據是否被篡改 好比遊戲安裝包 有沒有被改過 爲了防止別人撞庫成功 可用提高密碼的複雜度 其次能夠爲密碼加鹽 (加點內容進去)"""# ====================================================import hashlibm = hashlib.md5("aaa".encode("utf-8"))print(len(m.hexdigest()))# 撞庫破解的原理 有人事先 把常見的 明文和密文的對應關係 存到了數據庫中# 運氣好就能查詢到pwds = {"aaa":"47bce5c74f589f4867dbd57e9ca9f808"}h1 = hashlib.sha512("123".encode("utf-8"))h2 = hashlib.sha3_512("123".encode("utf-8"))# print(len(h.hexdigest()))print(h1.hexdigest())print(h2.hexdigest())# 2b70683ef3fa64572aa50775acc84855# 加鹽m = hashlib.md5("321".encode("utf-8"))#加m.update("abcdefplkjoujhh".encode("utf-8"))print(m.hexdigest())import hmac# 沒啥區別 只是在建立的時候必須加鹽,瞭解h = hmac.new("abcdefjjjj".encode("utf-8"))h.update("123".encode("utf-8"))print(h.hexdigest())