前文講述加解密時,直接將密鑰寫在了python源代碼中,這肯定不是什么好的手法,應該將這類與代碼加功效無關的資訊保存到配置中,隨時可以需要進行修改,從大的角度來看,配置無非就是以下方式:
- 保存到組態檔中,格式可以是txt/csv/ini/xml/yaml/json/其它特殊格式等;
- 保存到資料庫中,資料庫可以是本地的,也可以是遠程的;
- 特殊情況下,配置資訊先加密再保存,
- 沒有格式的例如txt檔案易讀但也容易搞壞,從而使配置內容無法正確決議;
- 有格式的例如xml/yaml/json需要安裝相關的包,需要寫代碼讀寫,其實也不輕松;
- 檔案系統會讓路徑問題一直存在,需要解決找到組態檔的問題,
- 資料庫管理系統本身需要架構,如果是輕量級配置,重型的資料庫管理系統MYSQL/REDIS/SQLSERVER等性價比不高;
- 資料庫的使用需要掌握SQL語言,如果是輕量級配置也不合算,
- 借助于標準庫configparser來訪問ini檔案;
- 使用標準庫dbm訪問鍵值資料庫,
configparser訪問配置資訊
使用歷史悠久的INI檔案格式來描述,檔案內容如下所示:
cat .\aeshandler.ini
[AES]
key=stayhungrystayfoolish
可以看出,組態檔由[]定義了所謂的section(節),節的名字隨意,這里定義為'AES',隨后在節里定義具體的內容,這里將密鑰保存在'key'這個名字里,
使用python獲得配置的代碼如下:
from configparser import ConfigParser def readconfig(): """ 使用標準庫讀取組態檔 Returns: str: 組態檔中保存的密鑰 """ config = ConfigParser() config.read('aeshandler.ini',encoding='utf-8') return config.get('AES','key') if __name__ == '__main__': key = readconfig() realkey = key[:16].encode('utf-8') print(f'realkey is {realkey}')
功能性的代碼同前文,為了節省空間不再復制,通過configparser讀取組態檔確實非常簡單易行,遠比操作資料庫甚至比普通的檔案讀寫還簡易,
使用dbm來讀寫配置
DBM資料庫是UNIX的鍵-值對資料庫,能夠保存python中字典型別的資訊,以下代碼實作類似的功能:
import dbm def writeconfig(dbmfilename, key): """ 向DBM庫寫配置的密鑰值 Args: dbmfilename (str): dbm資料庫名稱 key (str): 寫入的密鑰值 """ with dbm.open(dbmfilename, 'n') as db: db['key'] = key def readconfig(dbfilename): """ 從DBM庫中讀取密鑰 Args: dbfilename (str): 資料庫名稱 Returns: str: 組態檔中保存的密鑰 """ with dbm.open(dbfilename, 'r') as db: return db['key'] if __name__ == '__main__': writeconfig("aeshandler.dbm", "talkischeapshowyourcode") key = readconfig("aeshandler.dbm") realkey = key[:16] print(f'realkey is {realkey}')
實作類似的功能,但代碼量更小,確實很方便的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538004.html
標籤:Python
