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

时间:2019-02-06 13:54:13

标签: javascript node.js cryptography

这是我的代码的一部分,该代码使用crypto,并且可以与Node v8.15.0正常工作:

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

当我切换到节点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)

如何在节点10和加密中获取 DSA


其他信息: 节点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' ]

在节点8中,我被截断了(因为SO不喜欢太多代码):

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

1 个答案:

答案 0 :(得分:1)

在Node.js的GitHub存储库中有一个issue。基本上,事实是,Node.js正在使用的基础OpenSSL中已删除了对DSA的支持。

根据this comment

  

DSA-SHA1已重命名为DSS1

但是:

  

但是,如果我在节点v10.15.1 crypto.getHashes()中运行,那么我也不会得到DSS1

因此,从我的角度来看,您唯一的选择是切换到另一种签名算法,或者尝试找到独立于Node.js的crypto模块(因此,独立于OpenSSL。