跳到主要内容

safeStorage

允许访问用于在本地机器上存储的字符串的简单加密和解密。

进程:主进程

此模块通过使用操作系统提供的加密系统,为存储在磁盘上的数据增加了额外的保护。下面概述了每个平台的当前安全语义。

  • macOS: 加密密钥存储在 钥匙串访问 中,以防止其他应用程序在没有用户覆盖的情况下加载它们。因此,内容受到保护,不会受到同一用户空间中运行的其他用户和其他应用程序的攻击。
  • Windows: 加密密钥通过 DPAPI 生成。根据 Windows 文档:“通常,只有与加密数据的用户具有相同登录凭据的用户才能解密数据”。因此,内容受到保护,不会受到同一台机器上的其他用户的攻击,但不会受到同一用户空间中运行的其他应用程序的攻击。
  • Linux: 加密密钥在密钥存储中生成和存储,该密钥存储因窗口管理器和系统设置而异。当前支持的选项有 kwalletkwallet5kwallet6gnome-libsecret,但 Electron 的未来版本可能会提供更多选项。因此,通过 safeStorage API 保护的内容的安全语义因窗口管理器和密钥存储而异。
    • 请注意,并非所有 Linux 设置都具有可用的密钥存储。如果没有可用的密钥存储,则使用 safeStorage API 存储的项目将不受保护,因为它们是通过硬编码的纯文本密码加密的。当 safeStorage.getSelectedStorageBackend() 返回 basic_text 时,您可以检测到这种情况。

请注意,在 Mac 上,需要访问系统钥匙串,这些调用可能会阻塞当前线程以收集用户输入。如果密码管理工具可用,Linux 也是如此。

方法

safeStorage 模块具有以下方法

safeStorage.isEncryptionAvailable()

返回 boolean - 是否可以使用加密。

在 Linux 上,如果应用程序已发出 ready 事件并且密钥可用,则返回 true。在 MacOS 上,如果 Keychain 可用,则返回 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-CinnamonDeepinGNOMEPantheonXFCEUKUIunity 或提供了以下命令行标志 --password-store="gnome-libsecret" 时。
  • kwallet - 当桌面会话为 kde4 或提供了以下命令行标志 --password-store="kwallet" 时。
  • kwallet5 - 当桌面会话为 kde5 或提供了以下命令行标志 --password-store="kwallet5" 时。
  • kwallet6 - 当桌面会话为 kde6 时。
  • unknown - 当在应用程序发出 ready 事件之前调用该函数时。