Openssl 和 Node 的 Crypto 有不同的输出

2024-04-13

简而言之,我想要sign一个字符串("a") 就像openssl using crypto节点中的库。但我一次又一次地得到错误的输出。

详细描述

使用 openssl 签名

我有两个生成的 rsa 密钥:public-key.pem and private-key.pem我用 openssl 制作了它们:

$ openssl genrsa 2048 > private-key.pem
$ openssl rsa -in private-key.pem -pubout >public-key.pem

当我在 shell 中输入这些内容时:

$ echo "a" | openssl dgst -sha256 -sign private-key.pem >signature_openssl.bin

它生成一个名为siganture_openssl.bin.

使用节点加密签名

const crypto = require('crypto')
const sign = crypto.createSign('SHA256')
const fs = require('fs')
const privateKey = fs.readFileSync('./private-key.pem', 'utf8')

sign.write("a")
sign.end()
let res = sign.sign(privateKey, 'binary')
fs.writeFileSync('./signature_node.bin', res, 'binary')

该块生成一个名为的文件signature_node.bin.

验证生成的二进制文件

为了验证生成的签名,我这样做:

$ echo "a" | openssl dgst -sha256 -signature signature_openssl.bin -verify public-key.pem
Verified OK

但节点不验证:

$ echo "a" | openssl dgst -sha256 -signature signature_node.bin -verify public-key.pem
Verification Failure

问题是:我做错了什么?!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openssl 和 Node 的 Crypto 有不同的输出 的相关文章

随机推荐