我在用密码。我有公钥,数据和签名。所有使用openssl命令都很好。
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -verify pk.pem -signature sigval1.sig data1.txt但是,在使用节点密码验证时,总是返回false。
crypto.verify(
'RSA-SHA256',
Buffer.from(data),
newPublicKey,
Buffer.from(signature, 'binary'),
)要求:"alg": "RSASSA-PSS","hash": "SHA256"
发布于 2021-12-15 09:11:03
在OpenSSL语句中,PSS用作填充。NodeJS默认应用PSS v1.5填充,因此必须在crypto.verify(...)的第三个参数中显式指定PSS。
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)。
https://stackoverflow.com/questions/70354486
复制相似问题