safeStorage¶
允许对字符串进行简单的加密和解密,以便存储在本地机器上。
进程:主进程
该模块通过使用操作系统提供的加密系统,为存储在磁盘上的数据提供额外保护。各平台当前的安全语义如下所述。
[!NOTE] 同步 API(
isEncryptionAvailable/encryptString/decryptString)已在 Electron 46 中移除。 请使用isAsyncEncryptionAvailable/encryptStringAsync/decryptStringAsync;使用同步 API 加密的数据 可通过decryptStringAsync解密。
平台特定的密钥提供程序¶
- macOS:您的应用的加密密钥以某种方式存储在 Keychain Access 中,可防止 其他应用程序在未经用户覆盖的情况下加载它们。因此,内容受到保护,免受其他用户以及在同一用户空间中运行的其他应用程序的影响。
- Windows:加密密钥通过 DPAPI 生成。根据 Windows 文档:“通常,只有拥有与加密数据用户相同登录凭据的用户才能解密数据”。因此,内容受到保护,免受同一机器上其他用户的访问,但无法防止同一用户空间中运行的 其他应用程序访问。
- Linux:加密密钥会生成并存储在机密存储中,具体取决于您的窗口管理器和系统配置,因此
通过
safeStorageAPI 保护的内容的安全语义会因窗口管理器和机密存储而异。可能有多个密钥提供程序: org.freedesktop.portal.Secret:使用 Portal Secret D-Bus 接口获取特定于应用程序的机密。这是 Flatpak 等沙盒环境中首选的提供程序。- Secret Service API 和 KWallet:使用 freedesktop.org Secret Service API(例如 GNOME Keyring)或 KWallet 进行密钥存储。当前支持的选项为
kwallet、kwallet5、kwallet6和gnome-libsecret,可从桌面环境或--password-store命令行标志中选择。 - 请注意,并非所有 Linux 配置都有可用的机密存储。如果没有可用的机密存储,使用
safeStorageAPI 存储的项目将不受保护,因为它们通过硬编码的明文密码进行加密。当safeStorage.getSelectedStorageBackend()返回basic_text时,您可以检测到这种情况。
请注意,在 macOS 上,需要访问系统 Keychain,并可能会提示用户。 如果 Linux 上存在密码管理工具,情况也是如此。
这些操作是非阻塞的,并支持密钥轮换(由 shouldReEncrypt 指示)和临时不可用处理(由 isTemporarilyUnavailable 指示)。
[!IMPORTANT] 在 macOS 上,您的应用应经过代码签名 才能使
safeStorage保持一致的行为。如果没有有效且一致的签名, macOS 可能不会将您的应用的不同构建版本识别为同一应用程序, 这可能导致 Keychain 在每次更新时都重新提示用户授权。
事件¶
safeStorage 模块会发出以下事件:
方法¶
safeStorage 模块具有以下方法:
safeStorage.isAsyncEncryptionAvailable()¶
返回 Promise<boolean> - 解析为异步 safeStorage 操作是否可用加密。
异步加密器会在应用就绪后首次调用此方法、
encryptStringAsync 或 decryptStringAsync 时惰性初始化。
返回的 Promise 会在初始化完成后解析。
safeStorage.encryptStringAsync(plainText)¶
plainTextstring
返回 Promise<Buffer> - 表示加密字符串的字节数组。
safeStorage.decryptStringAsync(encrypted)¶
encryptedBuffer
返回 Promise<Object> - 解析为包含以下内容的对象:
shouldReEncryptboolean - 刚刚从解密操作返回的数据是否应重新加密,因为密钥已轮换,或者有一个提供不同安全级别的新密钥可用。如果为true,您应再次调用decryptStringAsync以获取新的解密字符串。resultstring - 解密后的字符串。
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事件之前调用此函数时。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron