如何藉助python第三方庫存取不同應用程式的使用者名稱、密碼

2023-10-27 21:01:53

  在之前的一系列文章中,小爬分享了很多用Pywin32、uiAutomation、sap Gui Script等技術實現應用程式或者Web網站(如SAP、Excel、outLook郵件系統、OA系統)的自動化操作的文章。但是,這些文章都繞開了一個知識點:如何優雅地實現自動登入。與其說是想聊聊如何實現自動登入,其實是繞到了另一個技術問題:如何安全可靠的儲存、更新和讀取使用者名稱、密碼?

  都2023年了,即使是給自己用的python指令碼,小爬也絕不建議直接在指令碼中寫下明文的密碼,亦或是在某個ini組態檔中直接寫密碼,這樣密碼洩露的風險非常高。如果咱們開發的指令碼是準備封裝為exe檔案給他人使用,更是應該做好這些使用者名稱、密碼資訊的安全儲存,不然誰敢用你提供的工具。

  不賣關子,如果您剛好喜歡用python程式設計,這裡推薦使用python第三方包,keyring(keyring · PyPI),非常方便。

  Python keyring庫使我們輕鬆存取系統的keyring服務,它可以用於任何 需要安全密碼儲存的應用程式。在windows系統中,keyring支援的後端服務:Windows Credential Locker

Keyring簡單上手

keyring最基礎的用法很簡單,只需要用到 keyring.set_password 以及keyring.get_password 方法:

>>> import keyring
>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'

命令列用法

當我們通過pip install keyring安裝完之後,我們便可以在命令列(CMD、Powershell)下輕鬆設定、獲取以及刪除密碼。

PS C:\Users\Admin> keyring -h
usage: keyring [-h] [-p KEYRING_PATH] [-b KEYRING_BACKEND] [--list-backends] [--disable]
               [--print-completion {bash,zsh,tcsh}]
               [{get,set,del,diagnose}] [service] [username]

positional arguments:
  {get,set,del,diagnose}
  service
  username

optional arguments:
  -h, --help            show this help message and exit
  -p KEYRING_PATH, --keyring-path KEYRING_PATH
                        Path to the keyring backend
  -b KEYRING_BACKEND, --keyring-backend KEYRING_BACKEND
                        Name of the keyring backend
  --list-backends       List keyring backends and exit
  --disable             Disable keyring and exit
  --print-completion {bash,zsh,tcsh}
                        print shell completion script

 

  知道這些之後,假如我們想儲存比如OA的使用者名稱 NewJune、密碼mypsd,在命令列中的效果是這樣:

PS C:\Users\admin> keyring set oa newjune
Password for 'newjune' in 'oa':
PS C:\Users\adminn> keyring get oa newjune
mypsw

API

keyring庫給我們提供了這些API來呼叫:

  • get_keyring(): Return the currently-loaded keyring implementation.返回當前載入的keyring實現。

  • get_password(service, username): Returns the password stored in the active keyring. If the password does not exist, it will return None.返回當前活躍keyring中儲存的密碼,如果密碼不存在,則返回None。

  • get_credential(service, username): 返回活躍keyring中的一個credential物件,物件中包含特定服務的username和password屬性。username引數可以設定為None,如果某個服務儲存了多組使用者名稱密碼,則會隨機返回一組。

  • set_password(service, username, password): Store the password in the keyring.將密碼儲存入keyring中。

  • delete_password(service, username): Delete the password stored in keyring. If the password does not exist, it will raise an exception.刪除儲存在keyring中的密碼,如果密碼不存在,則會丟擲異常。

 

有了Keyring庫,我們就可以輕鬆將SAP、OA、瀏覽器等應用的使用者名稱、密碼進行系統安全級別的儲存,也可以隨時用指令碼取出對應的憑據credential,為程式的自動登入、後臺作業等場景提供支援,趕緊試試吧!

快來關注本公眾號 獲取更多爬蟲、資料分析的知識!