简而言之,我想要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
问题是:我做错了什么?!