Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 crypto中使用公钥验证签名_Node.js_Openssl_Cryptography_Node Crypto - Fatal编程技术网

在Node.JS crypto中使用公钥验证签名

在Node.JS crypto中使用公钥验证签名,node.js,openssl,cryptography,node-crypto,Node.js,Openssl,Cryptography,Node Crypto,是否有一种好方法可以使用公钥验证Node.JS(v0.4+)中的签名 当前的加密模块允许使用证书,但不允许使用公钥。例如: var crypto = require("crypto"); verifier = crypto.createVerifier("sha1"); verifier.update("signed data"); verifier.verify(CERT, signature); 变量CERT需要签名证书(我猜公钥是从中提取的),但我所拥有的只是公钥,而不是证书 实现这一

是否有一种好方法可以使用公钥验证Node.JS(v0.4+)中的签名

当前的加密模块允许使用证书,但不允许使用公钥。例如:

var crypto = require("crypto");

verifier = crypto.createVerifier("sha1");
verifier.update("signed data");
verifier.verify(CERT, signature);
变量
CERT
需要签名证书(我猜公钥是从中提取的),但我所拥有的只是公钥,而不是证书

实现这一点的唯一可靠方法似乎是将数据、公钥和签名的内容转储到文件中并执行
openssldgst

fs.writeFileSync("public.key", pubkey);
fs.writeFileSync("sig.sha1", signature);
fs.writeFileSync("data.txt", data);
exec("openssl dgst -sha1 -verify public.key -signature sig.sha1 data.txt", ...)
但每次我需要验证签名时创建(和删除)文件似乎完全是浪费

有什么好办法可以做得更好吗

更新2011-08-03


Node.js v0.5中的加密模块允许验证(RSA或X.509)

为什么不将公钥放入自签名证书中?然后节点的加密模块就可以正常工作了


我认为这样做比派生一个openssl子进程要有效得多。

好吧,我非常肯定openssl是一条可行的道路。它是否允许您在应用程序中流式传输值,或者该应用程序是否必须使用文件?你打算多久做一次?有规律,但不经常。我可以接受这个解决方案,但它感觉非常错误,尤其是与更优雅的加密验证器相比。我不希望使用文件。我希望将公钥作为第一个参数传递,但我不确定它是否应该是b64编码的字符串、用“----开始键----”和“----结束键----”包装的字符串或新缓冲区(U字符串,'base64')。我尝试了所有,但crypto仍在寻找证书。如何告诉它我正在直接传递公钥?我使用--BEGIN public key----和--END public key----当我看到openssl从私钥PEM中提取公钥时,错误消息消失了。我尝试使用节点0.8中的加密模块来做这件事。。。结果失败了。您似乎取得了更大的成功,可以发布一些代码吗?是否可以使用公钥生成证书?所有示例都使用私钥而不是公钥。所有示例都涉及一对2个密钥,1个私钥,1个公钥。创建CSR时,CSR包含一个证书,证书包含一个公钥。这里有一个更清楚的文档,“genrsa”实际上生成了一对连接的密钥,1个公共密钥,1个私有密钥。第一段:“使用OpenSSL,私钥也包含公钥信息,因此不需要单独生成公钥。”