gpt4 book ai didi

使用 Open SSL 生成 RSA key 的 Node.js 函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:09 25 4
gpt4 key购买 nike

我使用 Node.js 作为服务器端语言,我想为在我的网站上注册的任何用户生成 RSA key 对。我正在使用一个名为 keypair 的模块。它对于小尺寸的 key 工作得很好,但是当我生成大小为 2048 的 key 时,执行它需要很长时间,因此我想使用 Node.js 直接从 Node.js 使用 Open SSL,使用 Node 的 child_process,如下面的脚本中所述:

var cp = require('child_process')
, assert = require('assert');

var privateKey, publicKey;
publicKey = '';
cp.exec('openssl genrsa 2048', function(err, stdout, stderr) {
assert.ok(!err);
privateKey = stdout;
console.log(privateKey);
makepub = cp.spawn('openssl', ['rsa', '-pubout']);
makepub.on('exit', function(code) {
assert.equal(code, 0);
console.log(publicKey);
});
makepub.stdout.on('data', function(data) {
publicKey += data;
});
makepub.stdout.setEncoding('ascii');
makepub.stdin.write(privateKey);
makepub.stdin.end();
});

这是有效的,并且在 key 对生成方面比 Node.js key 对模块更快,所以我遇到的问题是我不理解这段代码(如果它在服务器端写入文件并从中读取 key )或不是?)并且我想将此脚本转换为一个函数,该函数返回 JSON 或数组作为保存公钥和私钥的结果。

欢迎任何建议,提前谢谢。

最佳答案

试试这个..稍微移动了代码。使用已删除的 tmp 文件,可能可以在没有 tmp 文件的情况下完成,但这应该可以工作。

var cp = require('child_process')
, assert = require('assert')
, fs = require('fs')
;

// gen pub priv key pair
function genKeys(cb){
// gen private
cp.exec('openssl genrsa 2048', function(err, priv, stderr) {
// tmp file
var randomfn = './' + Math.random().toString(36).substring(7);
fs.writeFileSync(randomfn, priv);
// gen public
cp.exec('openssl rsa -in '+randomfn+' -pubout', function(err, pub, stderr) {
// delete tmp file
fs.unlinkSync(randomfn);
// callback
cb(JSON.stringify({public: pub, private: priv}, null, 4));
});

});
}

genKeys(console.log);

关于使用 Open SSL 生成 RSA key 的 Node.js 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19003321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com