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