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
布尔值
此函数在 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
事件之前调用该函数时。