safeStorage
允许在本地机器上存储字符串时,进行简单的加密和解密。
进程:主进程
此模块通过使用操作系统提供的加密系统,为存储在磁盘上的数据增加了额外的保护。每个平台的当前安全语义概述如下。
- macOS:加密密钥会以一种不允许其他应用程序在用户未覆盖的情况下加载它们的方式,为您的应用存储在 Keychain Access (钥匙串访问) 中。因此,内容可以防止同一用户空间中的其他用户和其他应用程序访问。
- Windows:加密密钥通过 DPAPI 生成。根据 Windows 文档:“通常,只有具有与加密数据的用户相同的登录凭据的用户才能解密数据”。因此,内容可以防止同一台计算机上的其他用户访问,但不能防止同一用户空间中的其他应用程序访问。
- Linux:加密密钥会在一个秘密存储中生成和存储,具体取决于您的窗口管理器和系统设置。目前支持的选项有
kwallet、kwallet5、kwallet6和gnome-libsecret,但 Electron 的未来版本可能会支持更多选项。因此,通过safeStorageAPI 保护的内容的安全语义在不同的窗口管理器和秘密存储之间有所不同。- 请注意,并非所有 Linux 设置都有可用的秘密存储。如果没有任何秘密存储可用,使用
safeStorageAPI 存储的项目将不受保护,因为它们是通过硬编码的纯文本密码进行加密的。当safeStorage.getSelectedStorageBackend()返回basic_text时,您可以检测到这种情况的发生。
- 请注意,并非所有 Linux 设置都有可用的秘密存储。如果没有任何秘密存储可用,使用
请注意,在 Mac 上,需要访问系统 Keychain,这些调用可能会阻塞当前线程以收集用户输入。在 Linux 上,如果提供了密码管理工具,情况也是如此。
方法
safeStorage 模块具有以下方法
safeStorage.isEncryptionAvailable()
返回 boolean - 加密是否可用。
在 Linux 上,如果应用已发出 ready 事件且密钥可用,则返回 true。在 MacOS 上,如果 Keychain 可用,则返回 true。在 Windows 上,一旦应用发出 ready 事件,则返回 true。
safeStorage.encryptString(plainText)
plainTextstring
返回 Buffer - 表示加密字符串的字节数组。
如果加密失败,此函数将抛出错误。
safeStorage.decryptString(encrypted)
encryptedBuffer
返回 string - 解密后的字符串。将使用 safeStorage.encryptString 获取的加密缓冲区解密回字符串。
如果解密失败,此函数将抛出错误。
safeStorage.setUsePlainTextEncryption(usePlainText)
usePlainTextboolean
在 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或提供了以下命令行标志--password-store="kwallet6"时。unknown- 当在应用发出ready事件之前调用该函数时。