網站首頁 編程語言 正文
一、hashlib模塊
什么是哈希模塊:
hashlib模塊是一種加密模塊,內部存有多種加密類型
加密的作用:
可將明文數據進行加密,轉換成一串密文,密文越長說明文件加密的越復雜
加密算法的種類:
- md5
- base64
- hmac
- sha系列(sha1、sha224、sha256等等)
補充說明:
1.算法不變,如果內容相同,那么加密的結果肯定相同
2.待加密的明文,可以一次傳入,也可分多次傳入,不會影響密文的結果
3.加密的結果是無法反解密的
4.加鹽處理:
- 4.1.加鹽處理的意思是指:在明文內加入干擾項,可改變密文的結果,來提高被加密的安全性
- 4.2.動態加鹽:指干擾項是動態的,在加鹽的基礎上更大程度上提高被加密文件的安全性
應用方向:
用戶密碼加密
- 可應用于用戶登錄時,對密碼的加密
文件安全性校驗
- 可對文件進行加密,通過比對文件的密文來判斷文件是否被修改
基本操作與用法
導入模塊:
import hashlib
具體用法:
1、選擇加密算法:
?? ?md5 = hashlib.md5()2、傳入明文:
?? ?md5.update(b'hello') ?
? ?# 傳入的明文需提前轉換成二進制的方式3、獲取加密密文:
?? ?res = md5.hexdigets()
?? ?print(res) ?
?? ?# 5d41402abc4b2a76b9719d911017c592
二、subprocess模塊簡介
什么是subprocess模塊:
subprocess是python內置的模塊,這個模塊中的Popen可以查看用戶輸入的命令行是否存在
如果存在,把內容寫入到stdout管道中
如果不存在,把信息寫入到stderr管道
要注意的是,這個模塊的返回結果只能讓開發者看一次,如果想多次查看,需要在第一次輸出的時候,把所有信息寫入到變量中。
基本操作與用法
模塊導入:
import subprocess
基本格式:
subprocess.Popen('命令',
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
- shell=True 表示要在終端中運行的命令
- stdout=sbuprocess.PIPE 表示當命令存在的時候,把結果寫入到stdout管道
- stderr=sbuprocess.PIPE 表示當命令不存在的時候,把結果吸入到stderr管道
具體用法:
import subprocess
r = subprocess.Popen('xxxx', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(r.stdout.read().decode('utf8'))
print(r.stderr.read().decode('utf8'))
三、logging模塊簡介
什么是logging模塊:
loggin模塊是用來寫日志的,以前我們寫日志需要自己往文件里寫記錄信息,使用了logging之后我們只需要一次配置好,以后寫日志的事情都不需要我們操心了,非常方便
日志的組成:
- 產生日志
- 過濾日志
- 輸出日志
- 日志格式
日志的等級:
DEBUG
- 最詳細的日志信息,典型應用場景是 問題診斷
INFO
- 信息詳細程度僅次于DEBUG,通常只記錄關鍵節點信息,用于確認一切都是按照我們預期的那樣進行工作
WARNING
- 當某些不期望的事情發生時記錄的信息(如,磁盤可用空間較低),但是此時應用程序還是正常運行的
ERROR
- 由于一個更嚴重的問題導致某些功能不能正常運行時記錄的信息
CRITICAL
- 當發生嚴重錯誤,導致應用程序不能繼續運行時記錄的信息
掌握層度:
longging日志模塊,內置方法與代碼相對固定,在使用時,只需根據個人要求,對內部變量稍作修改即可使用
基本操作與用法
導入模塊:
import logging
打印日志級別:
logging.debug('Python debug')
logging.info('Python info')
logging.warning('Python warning')
logging.error('Python Error')
logging.critical('Python critical')
-------------------------------------------------------------------
WARNING:root:Python warning
ERROR:root:Python Error
CRITICAL:root:Python critical
當指定一個日志級別之后,會記錄大于或等于這個日志級別的日志信息,小于的將會被丟棄, 默認情況下日志打印只顯示大于等于 WARNING 級別的日志。
代碼用法:
import logging
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# 建立一個filehandler來把日志記錄在文件里,級別為debug以上
fh = logging.FileHandler("spam.log")
fh.setLevel(logging.DEBUG)
# 建立一個streamhandler來把日志打在CMD窗口上,級別為error以上
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# 設置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
fh.setFormatter(formatter)
#將相應的handler添加在logger對象中
logger.addHandler(ch)
logger.addHandler(fh)
# 開始打日志
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
日志模板:
import logging
import logging.config
# 定義日志輸出格式 開始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name為getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 自定義文件路徑
logfile_path = 'a3.log'
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 過濾日志
'handlers': {
# 打印到終端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
'backupCount': 5,
# 這里兩個參數的意思是一個日志文件最多寫5M,最多可以存在五個不同的日志文件,但是當數量達到五個之后就會出現最早的那個會被刪除,
# 然后再產生一個新的文件(類似于覆蓋了最早的那個文件)
'encoding': 'utf-8', # 日志文件的編碼,再也不用擔心中文log亂碼了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 這里把上面定義的兩個handler都加上,即log數據既寫入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)傳遞
}, # 當鍵不存在的情況下 (key設為空字符串)默認都會使用該k:v配置
# '購物車記錄': {
# 'handlers': ['default','console'], # 這里把上面定義的兩個handler都加上,即log數據既寫入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)傳遞
# }, # 當鍵不存在的情況下 (key設為空字符串)默認都會使用該k:v配置
},
}
logging.config.dictConfig(LOGGING_DIC) # 自動加載字典中的配置
# logger1 = logging.getLogger('購物車記錄')
# logger1.warning('尊敬的VIP客戶 晚上好 您又來啦')
# logger1 = logging.getLogger('注冊記錄')
# logger1.debug('jason注冊成功')
logger1 = logging.getLogger('紅浪漫顧客消費記錄')
# 當這里的getLogger內部的參數如果字典中沒有,就會自動使用字典中名稱為空的那個模版來執行
logger1.debug('慢男 猛男 騷男')
原文鏈接:https://www.cnblogs.com/kangssssh/p/16834243.html
相關推薦
- 2022-07-14 關于C#?dynamic裝箱問題_C#教程
- 2022-08-18 nginx之queue的具體使用_nginx
- 2022-06-09 FreeRTOS動態內存分配管理heap_2示例_操作系統
- 2022-04-25 C語言實現線索二叉樹的前中后創建和遍歷詳解_C 語言
- 2022-05-09 C++智能指針shared_ptr_C 語言
- 2022-10-07 Android開發Jetpack組件Lifecycle原理篇_Android
- 2022-05-17 Springboot+Maven做啟動類與業務模塊分離的架構模式
- 2023-04-08 Swift?HTTP加載請求Loading?Requests教程_Swift
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支