如何在Node.js中使用/ private键进行签名

时间:2013-03-14 22:29:56

标签: php node.js cryptography openssl

我正在尝试为以下PHP函数执行等效操作

openssl_private_encrypt

使用我的私钥来签署字符串

这就是我正在做的事情

var signer = crypto.createSign('RSA-SHA256').update(timestamp + '|' + userId);
var signature = signer.sign(privKey, 'base64');

我的第一个问题是当RSA和SHA256组合在一起时意味着什么?我理解用RSA私钥加密某些东西意味着什么,或者用SHA256散列东西。但我无法理解将这两者结合在一起意味着什么。

我把它放在那里因为createSign需要一个字符串参数,(不支持“RSA”),而RSA-SHA256是我找到的最接近的东西。

我的第二个问题是我如何

openssl_private_encrypt
Node.js中的

1 个答案:

答案 0 :(得分:2)

正常签名操作包括哈希计算,然后(如果函数需要),然后通过私钥加密。散列是消息的压缩 - 较小 - 表示消息,不能找到重复的散列(冲突)。对于RSA,然后使用PKCS#1 v2.1(公共标准)中的方案填充消息,之后执行模幂运算。

模幂运算通常被错误地称为加密,加密需要为RSA使用不同的填充方法(并且不对加密执行散列)。

您不应该使用openssl_private_encrypt来签署字符串,它是一个已弃用的函数,主要用于相对特定的身份验证目的。当它单独使用时,它使用用于签名的填充来加密数据,但它确实省去了散列和散列指示符。

要为openssl_private_encrypt创建等效项,您需要能够执行PKCS#1 v1.5填充方法和模幂运算。您可以从Node.js的源代码中检索这些函数,您不太可能在更高级别的API中找到它们。但是,建议您取消PHP中的openssl_private_encrypt函数并使用更高级别的签名函数。