首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js中的Crypto RSASSA

node.js中的Crypto RSASSA
EN

Stack Overflow用户
提问于 2021-12-14 19:20:10
回答 1查看 478关注 0票数 0

我在用密码。我有公钥,数据和签名。所有使用openssl命令都很好。

代码语言:javascript
复制
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -verify pk.pem -signature sigval1.sig data1.txt

但是,在使用节点密码验证时,总是返回false。

代码语言:javascript
复制
crypto.verify(
    'RSA-SHA256',
    Buffer.from(data),
    newPublicKey,
    Buffer.from(signature, 'binary'),
  )

要求:"alg": "RSASSA-PSS","hash": "SHA256"

EN

回答 1

Stack Overflow用户

发布于 2021-12-15 09:11:03

在OpenSSL语句中,PSS用作填充。NodeJS默认应用PSS v1.5填充,因此必须在crypto.verify(...)的第三个参数中显式指定PSS。

代码语言:javascript
复制
var verified = crypto.verify(
    'RSA-SHA256',
    Buffer.from(data, 'utf-8'),
    {
        key: newPublicKey, 
        padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
        //saltLength: crypto.constants.RSA_PSS_SALTLEN_MAX_SIGN // default
    },
    Buffer.from(signature, 'binary')
);

请注意,OpenSSL语句使用最大可能的盐分长度作为盐分长度,而不是在RFC8017中给出的默认值,即摘要的输出长度。这在这里并不重要,因为crypto.verify()也使用最大盐长度(crypto.constants.RSA_PSS_SALTLEN_MAX_SIGN)。

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

https://stackoverflow.com/questions/70354486

复制
相关文章

相似问题

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