Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Openssl和Node';s加密有不同的输出_Node.js_Openssl_Cryptography - Fatal编程技术网

Node.js Openssl和Node';s加密有不同的输出

Node.js Openssl和Node';s加密有不同的输出,node.js,openssl,cryptography,Node.js,Openssl,Cryptography,简而言之,我想在节点中使用crypto库对字符串(“a”)进行签名,就像openssl一样。但我一次又一次地得到错误的输出 长描述 使用openssl签名 我有两个生成的rsa密钥:public key.pem和private key.pem,它们是我用openssl制作的: $ openssl genrsa 2048 > private-key.pem $ openssl rsa -in private-key.pem -pubout >public-key.pem 当我在she

简而言之,我想在节点中使用
crypto
库对
字符串(
“a”
)进行签名,就像
openssl
一样。但我一次又一次地得到错误的输出

长描述 使用openssl签名 我有两个生成的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\u openssl.bin
的文件

节点加密签名
const crypto=require('crypto'))
常量符号=crypto.createSign('SHA256')
常量fs=require('fs')
const privateKey=fs.readFileSync('./private-key.pem','utf8')
签名。写(“a”)
结束()
让res=sign.sign(privateKey,'binary')
fs.writeFileSync('./signature_node.bin',res',binary')
此块生成名为
signature\u 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

问题是:我做错了什么

在节点中,您对一个由字母a组成的字符串进行了签名,但在OpenSSL中,您都进行了签名,并试图验证一个由字母a加换行符组成的字符串。这是不同的数据,签名的目的是验证相同的数据,而不是不同的数据。假设是非古代Unix,请尝试使用
printf%s“a”
(在本例中实际上不需要引号,但在其他情况下可能需要引号)。PS:您以两种不同的方式拼错了
签名
文件名,但我认为这只是发布中的一个错误,您的实际文件是正确的。@dave_thompson_085谢谢您解决了我的问题。如果你回答这个问题,我会接受它作为正确答案。除非你想换行,否则使用
echo-n
。或者,在Node.js代码中添加新行。在Linux上,换行符是
LF
。另见.、等。