简而言之,我想sign
一个字符串("a"
)就像openssl
在节点中使用crypto
库一样。但我一遍又一遍得错了输出。
我有两个生成的rsa密钥:public-key.pem
和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
问题是:我做错了什么?!