首页 > 解决方案 > crypto.getCiphers() - 为什么通过 NodeJS (v12.18.3) 与 ElectronJS 通过 (NodeJS 12.14.1) 提供一组不同的算法?

问题描述

查看 12.18.3 版本的 NodeJS 文档以了解该crypto.createCipheriv() 方法

该方法需要 3 个必需参数:

  1. algorithm(表示用于加密数据的算法的字符串)
  2. key(表示加密的“密码”的字符串或缓冲区)
  3. iv(表示初始化向量的字符串或缓冲区)

算法字符串

该站点还解释说,可以通过运行终端命令来获取算法字符串的值:$ openssl list -cipher-algorithms

不幸的是,网站上没有关于算法参数的字符串值的其他文档。

我的机器上可用的 175 种算法列表

到目前为止,一切都很好。我运行了终端命令,得到了 175 种可用加密算法的列表。它们看起来如下所示:

AES-128-CBC
AES-128-CBC-HMAC-SHA1
AES-128-CBC-HMAC-SHA256
id-aes128-CCM
AES-128-CFB
AES-128-CFB1
AES-128-CFB8
AES-128-CTR
AES-128-ECB
id-aes128-GCM
AES-128-OCB
AES-128-OFB
AES-128-XTS
AES-192-CBC
id-aes192-CCM
AES-192-CFB
AES-192-CFB1
AES-192-CFB8
AES-192-CTR
AES-192-ECB
id-aes192-GCM
AES-192-OCB
AES-192-OFB
AES-256-CBC
...

节点 v12.18.3

当我设置适当的项目并从名为的示例应用程序中运行另一个 NodeJS 加密算法时,crypto.getCiphers()我看到了完全相同的 175 种算法列表。这在我的机器 v12.18.3 上使用默认的 Node 版本运行。

Electron 下的节点:v12.14.1

但是,当我在运行 Node v12.14.1 和 Electron 9.3.0 的 ElectonJS 应用程序中调用相同的方法时,我只看到列出了 24 种算法。

没有文档也没有解释差异

但是,没有文档表明这个略有不同的 Node 版本会返回与我机器上可用的列表不同的任何内容。

问题

为什么 Node v12.14.1 via Electron 只给我 24 个列表?这份名单来自哪里?谁能告诉我可能记录在哪里?

这是显示版本并显示对 crypto.getCiphers() 的调用的 Electron 应用程序的快照:

电子和crypto.getCiphers()

当我可以*通过节点 v12.18.3 使用算法字符串“aes256”运行官方节点示例代码但无法通过电子/节点 v12.4.1 运行代码时,这个问题变得很明显,因为“aes256”算法不可用。该示例代码包括以下行:crypto.createCipheriv("aes256", key, resizedIV)

更新

不得不回来并添加以下内容作为此问题的一部分。我成功地使用适当的算法(aes-256-cbc)加密了数据,现在当我在我的 ElectronJS 应用程序中解密数据时,我收到以下错误:

openssl 参考

我的观点是,显示的错误是从 ElectronJS 应用程序中引用 OPENSSL,即使(很可能-来自已发布的评论)Electron 实际上使用的是 BoringSSL。我想要理解这些东西,你必须是一名火箭科学家一名脑外科医生。xD

标签: node.jsopensslelectron

解决方案


推荐阅读