safeStorage
允許存取簡單的字串加密和解密,以便儲存在本機。
程序:主程序
此模組透過使用作業系統提供的加密系統,為儲存在磁碟上的資料增加額外的保護。以下概述了每個平台的當前安全語意。
- macOS:加密金鑰儲存在您的應用程式的 鑰匙圈存取 中,以防止其他應用程式在未經使用者覆寫的情況下載入它們。因此,內容受到保護,免於同一使用者空間中的其他使用者和其他應用程式的存取。
- Windows:加密金鑰透過 DPAPI 產生。根據 Windows 文件:「通常,只有與加密資料的使用者具有相同登入憑證的使用者才能解密資料」。因此,內容受到保護,免於同一機器上的其他使用者的存取,但無法免於同一使用者空間中其他應用程式的存取。
- Linux:加密金鑰會產生並儲存在一個秘密儲存區中,該儲存區會根據您的視窗管理員和系統設定而有所不同。目前支援的選項有
kwallet
、kwallet5
、kwallet6
和gnome-libsecret
,但 Electron 的未來版本可能會提供更多選項。因此,透過safeStorage
API 保護的內容的安全語意會因視窗管理員和秘密儲存區而異。- 請注意,並非所有 Linux 設定都有可用的秘密儲存區。如果沒有可用的秘密儲存區,則使用
safeStorage
API 儲存的項目將不受保護,因為它們是透過硬編碼的純文字密碼加密的。當safeStorage.getSelectedStorageBackend()
傳回basic_text
時,您可以偵測到何時發生這種情況。
- 請注意,並非所有 Linux 設定都有可用的秘密儲存區。如果沒有可用的秘密儲存區,則使用
請注意,在 Mac 上,需要存取系統鑰匙串,並且這些呼叫可能會封鎖目前執行緒以收集使用者輸入。如果密碼管理工具可用,Linux 也是如此。
方法
safeStorage
模組具有以下方法
safeStorage.isEncryptionAvailable()
傳回 boolean
- 是否可使用加密。
在 Linux 上,如果應用程式已發出 ready
事件且秘密金鑰可用,則傳回 true。在 MacOS 上,如果鑰匙圈可用,則傳回 true。在 Windows 上,一旦應用程式發出 ready
事件,即傳回 true。
safeStorage.encryptString(plainText)
plainText
字串
傳回 Buffer
- 代表加密字串的位元組陣列。
如果加密失敗,此函式將擲回錯誤。
safeStorage.decryptString(encrypted)
encrypted
Buffer
傳回 string
- 解密後的字串。將使用 safeStorage.encryptString
取得的加密緩衝區解密回字串。
如果解密失敗,此函式將擲回錯誤。
safeStorage.setUsePlainTextEncryption(usePlainText)
usePlainText
boolean
在 Linux 上,當無法為目前活動的桌面環境判斷有效的作業系統密碼管理員時,此函式將強制模組使用記憶體中的密碼來建立用於加密/解密函式的對稱金鑰。此函式在 Windows 和 MacOS 上為空操作。
safeStorage.getSelectedStorageBackend()
Linux
傳回 string
- 在 Linux 上選取的密碼管理員的使用者友善名稱。
此函式將傳回下列其中一個值
basic_text
- 當桌面環境無法辨識或提供以下命令列旗標--password-store="basic"
時。gnome_libsecret
- 當桌面環境為X-Cinnamon
、Deepin
、GNOME
、Pantheon
、XFCE
、UKUI
、unity
或提供以下命令列旗標--password-store="gnome-libsecret"
時。kwallet
- 當桌面工作階段為kde4
或提供以下命令列旗標--password-store="kwallet"
時。kwallet5
- 當桌面工作階段為kde5
或提供以下命令列旗標--password-store="kwallet5"
時。kwallet6
- 當桌面工作階段為kde6
時。unknown
- 當在應用程式發出ready
事件之前呼叫函式時。