Node.js'crypto.createSign()的有效algorithminputstring

我正在使用一个项目的节点的encryption签名,并一直在试图考虑各种algorithm的起伏。 crypto.createSign()的描述如下所示:

创build并返回使用给定algorithm的Sign对象。 在最近的OpenSSL版本中, openssl list-public-key-algorithms将显示可用的签名algorithm。 一个例子是“RSA-SHA256”。

不幸的是,“RSA-SHA256”不是openssl list-public-key-algorithms的输出值之一(如下所示)。

那么这个函数的有效值是什么,或者如何从下面的列表中提取出来?

 OpenSSL list result: Name: OpenSSL RSA method Type: Builtin Algorithm OID: rsaEncryption PEM string: RSA Name: rsa Type: Alias to rsaEncryption Name: OpenSSL PKCS#3 DH method Type: Builtin Algorithm OID: dhKeyAgreement PEM string: DH Name: dsaWithSHA Type: Alias to dsaEncryption Name: dsaEncryption-old Type: Alias to dsaEncryption Name: dsaWithSHA1-old Type: Alias to dsaEncryption Name: dsaWithSHA1 Type: Alias to dsaEncryption Name: OpenSSL DSA method Type: Builtin Algorithm OID: dsaEncryption PEM string: DSA Name: OpenSSL EC algorithm Type: Builtin Algorithm OID: id-ecPublicKey PEM string: EC Name: OpenSSL HMAC method Type: Builtin Algorithm OID: hmac PEM string: HMAC Name: OpenSSL CMAC method Type: Builtin Algorithm OID: cmac PEM string: CMAC 

好吧,经过一番蛮力猜测之后,有效algorithminputstring的结构看起来没什么意义。 有什么例外看起来像一个规则。 如果省略了公钥algorithm,RSA似乎是默认的。 下面是一个不完整的工作值列表:

单独的公钥algorithm:

  • “DSA”

哈希独自:

  • “MD4”
  • “MD5”
  • “SHA”
  • “DSS1”
  • “MDC2”
  • “SHA1”
  • “SHA224”
  • “SHA256”
  • “SHA512”

公钥algorithm – 哈希对:

  • “RSA-MD4”
  • “RSA-MD5”
  • “RSA-SHA”
  • “RSA-MDC2”
  • “RSA-SHA1”
  • “RSA-SHA224”
  • “RSA-SHA256”
  • “RSA-SHA512”
  • “DSA-SHA”
  • “DSA-SHA1”

我不是密码学家,所以RSA可能需要明确的散列select,或者DSA与sha512或md5不兼容,但是我发现这些不一致是由openSSL的实现引起的。

我认为Node文档是错误的。 对于crypto.createSign() ,使用以下命令列出可能性:

 openssl list-message-digest-algorithms