2016-02-25 44 views
2

我正在使用節點的加密簽名爲一個項目,並一直試圖考慮各種算法的起伏。 crypto.createSign()的描述如下所示:Node.js的有效算法輸入字符串crypto.createSign()

創建並返回使用給定算法的Sign對象。在最近的OpenSSL版本中,openssl list-public-key-algorithms將顯示可用的簽名算法。一個例子是'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 

回答

0

好吧,經過一番蠻力和猜測之後,有效算法輸入字符串的結構看起來沒什麼意義。對於看起來像是規則的東西有很多例外。如果省略了公鑰算法,RSA似乎是默認值。下面是做的工作價值觀的不完全名單:

公鑰單獨算法:

  • 「DSA」 獨

哈希:

  • 「MD4」
  • 「MD5」
  • 「SHA」
  • 「DSS1」
  • 「MDC2」
  • 「SHA1」
  • 「SHA224」
  • 「SHA256」
  • 「SHA512」

公共密鑰算法,哈希對:

  • 「RSA-MD4」
  • 「R SA-MD5"
  • 「RSA-SHA」
  • 「RSA-MDC2」
  • 「RSA-SHA1」
  • 「RSA-SHA224」
  • 「RSA-SHA256」
  • 「RSA- SHA512"
  • 「DSA-SHA」
  • 「DSA-SHA1」

我不是一個譯電員,所以它可能是RS是可能的A需要明確的散列選擇,或者DSA與sha512或md5不兼容,但我發現這些不一致性更可能是由openSSL的實現引起的。

0

我認爲Node文檔是錯誤的。對於crypto.createSign(),請使用以下命令列出可能性:

openssl list-message-digest-algorithms