最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

加密模塊與subprocess模塊跟日志模塊

2022-10-27 21:03 作者:限量版范兒  | 我要投稿

hashlib 加密模塊

1.何為加密 將明文數(shù)據(jù)處理成密文數(shù)據(jù) 讓人無法看懂 2.為什么加密 保證數(shù)據(jù)的安全 3.如何判斷數(shù)據(jù)是否是加密的 一串沒有規(guī)律的字符串(數(shù)字、字母、符號(hào)) 4.密文的長(zhǎng)短有何講究 密文越長(zhǎng)表示使用的加密算法(數(shù)據(jù)的處理過程)越復(fù)雜 5.常見的加密算法有哪些 md5、base64、hmac、sha系列 6.加密算法基本操作 import hashlib ? ?# 1.選擇加密算法 ? ?md5 = hashlib.md5() ? ?# 2.傳入明文數(shù)據(jù) ? ?md5.update(b'hello') ? ?# 3.獲取加密密文 ? ?res = md5.hexdigest() ? ?print(res) ?# 5d41402abc4b2a76b9719d911017c592

加密模塊補(bǔ)充說明

1.加密算法不變 內(nèi)容如果相同 那么結(jié)果肯定相同 # md5.update(b'hello~world~python~666') ?# 一次性傳可以 ? ?md5.update(b'hello') ?# 分多次傳也可以 ? ?md5.update(b'~world') ?# 分多次傳也可以 ? ?md5.update(b'~python~666') ?# 分多次傳也可以 2.加密之后的結(jié)果是無法反解密的 只能從明文到密文正向推導(dǎo) 無法從密文到明文反向推導(dǎo) ? ?常見的解密過程其實(shí)是提前猜測(cè)了很多種結(jié)果 ? ? 123 ?密文 ? ? ? 321 ? ? 密文 ? ? 222 ? ? ?密文 3.加鹽處理 在明文里面添加一些額外的干擾項(xiàng) ? ?# 1.選擇加密算法 ? ?md5 = hashlib.md5() ? ?# 2.傳入明文數(shù)據(jù) ? ?md5.update('公司設(shè)置的干擾項(xiàng)'.encode('utf8')) ? ?md5.update(b'hello python') ?# 一次性傳可以 ? ?# 3.獲取加密密文 ? ?res = md5.hexdigest() ? ?print(res) ?# e53024684c9be1dd3f6114ecc8bbdddc 4.動(dòng)態(tài)加鹽 干擾項(xiàng)是隨機(jī)變化的 ? ? eg:當(dāng)前時(shí)間、用戶名部分... 5.加密實(shí)戰(zhàn)操作 1.用戶密碼加密 2.文件安全性校驗(yàn) 3.文件內(nèi)容一致性校驗(yàn) ? 4.大文件內(nèi)容加密 ? ? 截取部分內(nèi)容加密即可

subprocess模塊

模擬操作系統(tǒng)終端 執(zhí)行命令并獲取結(jié)果 import subprocess res = subprocess.Popen( ? ?'asdas', ?# 操作系統(tǒng)要執(zhí)行的命令 ? ?shell=True, ?# 固定配置 ? ?stdin=subprocess.PIPE, ?# 輸入命令 ? ?stdout=subprocess.PIPE, ?# 輸出結(jié)果 ) print('正確結(jié)果', res.stdout.read().decode('gbk')) ?# 獲取操作系統(tǒng)執(zhí)行命令之后的正確結(jié)果 print('錯(cuò)誤結(jié)果', res.stderr) ?# 獲取操作系統(tǒng)執(zhí)行命令之后的錯(cuò)誤結(jié)果

日志的組成

1.產(chǎn)生日志 2.過濾日志 基本不用 因?yàn)樵谌罩井a(chǎn)生階段就可以控制想要的日志內(nèi)容 3.輸出日志 4.日志格式 import logging # 1.日志的產(chǎn)生(準(zhǔn)備原材料) ? ? ? ?logger對(duì)象 logger = logging.getLogger('購(gòu)物車記錄') # 2.日志的過濾(剔除不良品) ? ? ? ?filter對(duì)象>>>:可以忽略 不用使用 # 3.日志的產(chǎn)出(成品) ? ? ? ? ? ? handler對(duì)象 hd1 = logging.FileHandler('a1.log', encoding='utf-8') ?# 輸出到文件中 hd2 = logging.FileHandler('a2.log', encoding='utf-8') ?# 輸出到文件中 hd3 = logging.StreamHandler() ?# 輸出到終端 # 4.日志的格式(包裝) ? ? ? ? ? ? format對(duì)象 fm1 = logging.Formatter( ? ? ? ?fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: ?%(message)s', ? ? ? ?datefmt='%Y-%m-%d %H:%M:%S %p', ) fm2 = logging.Formatter( ? ? ? ?fmt='%(asctime)s - %(name)s: ?%(message)s', ? ? ? ?datefmt='%Y-%m-%d', ) # 5.給logger對(duì)象綁定handler對(duì)象 logger.addHandler(hd1) logger.addHandler(hd2) logger.addHandler(hd3) # 6.給handler綁定formmate對(duì)象 hd1.setFormatter(fm1) hd2.setFormatter(fm2) hd3.setFormatter(fm1) # 7.設(shè)置日志等級(jí) logger.setLevel(10) ?# debug # 8.記錄日志 logger.debug('寫了半天 好累啊 好熱啊')

  • format常用格式說明

%(levelno)s: 打印日志級(jí)別的數(shù)值 %(levelname)s: 打印日志級(jí)別名稱 %(pathname)s: 打印當(dāng)前執(zhí)行程序的路徑,其實(shí)就是sys.argv[0] %(filename)s: 打印當(dāng)前執(zhí)行程序名 %(funcName)s: 打印日志的當(dāng)前函數(shù) %(lineno)d: 打印日志的當(dāng)前行號(hào) %(asctime)s: 打印日志的時(shí)間 %(thread)d: 打印線程ID %(threadName)s: 打印線程名稱 %(process)d: 打印進(jìn)程ID %(message)s: 打印日志信息

日志配置字典

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, ? ? ? ? ? ? ? ?# 這里兩個(gè)參數(shù)的意思是一個(gè)日志文件最多寫5M,最多可以存在五個(gè)不同的日志文件,但是當(dāng)數(shù)量達(dá)到五個(gè)之后就會(huì)出現(xiàn)最早的那個(gè)會(huì)被刪除, ? ? ? ? ? ? ? ?# 然后再產(chǎn)生一個(gè)新的文件(類似于覆蓋了最早的那個(gè)文件) ? ? ? ? ? ?'encoding': 'utf-8', ?# 日志文件的編碼,再也不用擔(dān)心中文log亂碼了 ? ? ? ?}, ? ?}, ? ?'loggers': { ? ? ? ?# logging.getLogger(__name__)拿到的logger配置 ? ? ? ?'': { ? ? ? ? ? ?'handlers': ['default', 'console'], ?# 這里把上面定義的兩個(gè)handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕 ? ? ? ? ? ?'level': 'DEBUG', ? ? ? ? ? ?'propagate': True, ?# 向上(更高level的logger)傳遞 ? ? ? ?}, ?# 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會(huì)使用該k:v配置 ? ? ? ?# '購(gòu)物車記錄': { ? ? ? ?# ? ? 'handlers': ['default','console'], ?# 這里把上面定義的兩個(gè)handler都加上,即log數(shù)據(jù)既寫入文件又打印到屏幕 ? ? ? ?# ? ? 'level': 'WARNING', ? ? ? ?# ? ? 'propagate': True, ?# 向上(更高level的logger)傳遞 ? ? ? ?# }, ?# 當(dāng)鍵不存在的情況下 (key設(shè)為空字符串)默認(rèn)都會(huì)使用該k:v配置 ? ?}, } logging.config.dictConfig(LOGGING_DIC) ?# 自動(dòng)加載字典中的配置 # logger1 = logging.getLogger('購(gòu)物車記錄') # logger1.warning('尊敬的VIP客戶 晚上好 您又來啦') # logger1 = logging.getLogger('注冊(cè)記錄') # logger1.debug('jason注冊(cè)成功') logger1 = logging.getLogger('紅浪漫顧客消費(fèi)記錄') # 當(dāng)這里的getLogger內(nèi)部的參數(shù)如果字典中沒有,就會(huì)自動(dòng)使用字典中名稱為空的那個(gè)模版來執(zhí)行 logger1.debug('慢男 猛男 騷男')

鏈接:https://www.dianjilingqu.com/589073.html

加密模塊與subprocess模塊跟日志模塊的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
壶关县| 通榆县| 六盘水市| 临桂县| 盘锦市| 柘荣县| 灵武市| 长春市| 庆云县| 贵阳市| 南皮县| 天长市| 岳阳市| 根河市| 澄城县| 全州县| 安多县| 西安市| 巫溪县| 宁武县| 桂东县| 万盛区| 屯昌县| 余江县| 满城县| 大竹县| 凌云县| 长岭县| 高安市| 蒙山县| 海阳市| 江达县| 奎屯市| 宁河县| 襄垣县| 余姚市| 彭州市| 中方县| 治县。| 东乡| 西城区|