加密和 Node 10 中的未知消息摘要

3

这是我的一部分代码,使用了crypto,在Node v8.15.0下运行良好:

const crypto = require('crypto');
...
const sign = crypto.createSign('DSA');

当我切换到Node 10时:

nvm install 10
node --version
v10.15.1

相同的源代码会返回错误:
     Error: Unknown message digest
      at new Sign (internal/crypto/sig.js:26:16)
      at Object.createSign (crypto.js:137:10)

如何在Node 10和加密中获取DSA?
附加信息: Node 10的crypto.getHashes()返回以下内容(没有DSA!):
[ 'RSA-MD4',
  'RSA-MD5',
  'RSA-MDC2',
  'RSA-RIPEMD160',
  'RSA-SHA1',
  'RSA-SHA1-2',
  'RSA-SHA224',
  'RSA-SHA256',
  'RSA-SHA384',
  'RSA-SHA512',
  'blake2b512',
  'blake2s256',
  'md4',
  'md4WithRSAEncryption',
  'md5',
  'md5-sha1',
  'md5WithRSAEncryption',
  'mdc2',
  'mdc2WithRSA',
  'ripemd',
  'ripemd160',
  'ripemd160WithRSA',
  'rmd160',
  'sha1',
  'sha1WithRSAEncryption',
  'sha224',
  'sha224WithRSAEncryption',
  'sha256',
  'sha256WithRSAEncryption',
  'sha384',
  'sha384WithRSAEncryption',
  'sha512',
  'sha512WithRSAEncryption',
  'ssl3-md5',
  'ssl3-sha1',
  'whirlpool' ]

当我在Node 8中运行以下代码时(因为SO不喜欢太多的代码,所以进行了截断):

[ 'DSA',
  'DSA-SHA',
  'DSA-SHA1',
  'DSA-SHA1-old',
  'RSA-MD4',
  'RSA-MD5',
  ...
  'whirlpool' ]

1个回答

3

在 Node.js 的 GitHub 存储库中有一个问题。基本上,这是因为底层 OpenSSL 中的 DSA 支持已被移除,而 Node.js 正在使用它。

根据此评论:

DSA-SHA1 已重命名为 DSS1

但是:

然而,如果我在 node v10.15.1 中运行 crypto.getHashes(),那么我也得不到 DSS1

因此,从我的角度来看,您唯一的选择是切换到另一种签名算法,或者尝试查找第三方模块,独立于 Node.js 的 crypto 模块(因此与 OpenSSL 无关)实现所需内容。


1
在我在Stack Overflow上发布了问题后,你基本上在GitHub上找到了我的评论 :) 无论如何,使用不同的模块可能会解决问题。我会研究一下这个方法... - iaforek
哈哈,抱歉我没有意识到! - Golo Roden
@iaforek,你最终找到解决方案了吗? - Prisoner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接