首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Node.js中使用私钥签名

如何在Node.js中使用私钥签名
EN

Stack Overflow用户
提问于 2013-03-15 06:29:56
回答 1查看 1.6K关注 0票数 3

我正在尝试对以下PHP函数执行相同的操作

代码语言:javascript
复制
openssl_private_encrypt

使用我的私钥对字符串签名

这就是我要做的

代码语言:javascript
复制
var signer = crypto.createSign('RSA-SHA256').update(timestamp + '|' + userId);
var signature = signer.sign(privKey, 'base64');

我的第一个问题是,将RSA和SHA256放在一起意味着什么?我知道用RSA私钥加密或者用SHA256散列是什么意思。但我不能理解这两个人在一起意味着什么。

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

我的第二个问题是如何

代码语言:javascript
复制
openssl_private_encrypt

在Node.js?

EN

回答 1

Stack Overflow用户

发布于 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函数,而使用更高级别的签名函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15421436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档