Openssl和Node的加密有不同的输出

时间:2017-12-31 10:24:19

标签: node.js openssl cryptography

简而言之,我想sign一个字符串("a")就像openssl在节点中使用crypto库一样。但我一遍又一遍得错了输出。

长描述

使用openssl

签名

我有两个生成的rsa密钥:public-key.pemprivate-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

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

0 个答案:

没有答案