我正在尝试对以下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?
发布于 2013-03-15 09:17:20
正常的签名操作由散列计算组成,然后(如果函数需要)进行散列计算,然后使用私钥进行加密。散列是消息的压缩-较小表示,因此不能找到重复的散列(冲突)。对于RSA,然后使用PKCS#1 v2.1 (公共标准)中的方案填充消息,之后执行模幂运算。
模幂运算通常被错误地称为加密,对于RSA,加密需要不同的填充方法(对于加密,也不执行散列)。
您不应该使用openssl_private_encrypt对字符串进行签名,它是一个已弃用的函数,主要用于相对特殊的身份验证目的。当它单独使用时,它使用用于签名的填充来加密数据,但它确实省略了散列和散列指示符。
要创建openssl_private_encrypt的等价物,您需要能够执行PKCS#1 v1.5填充方法和模幂运算。您可能可以从Node.js的源代码中检索这些函数,但不太可能在更高级别的API中找到它们。但是,建议您取消PHP语言中的openssl_private_encrypt函数,而使用更高级别的签名函数。
https://stackoverflow.com/questions/15421436
复制相似问题