Что ж, это правда, что без предоставления генератора и простого генерация ключа медленна в реализации, представленной в node.js. Но что делает его медленным, так это создание правильного простого числа и генератора, где простое число будет 2048 бит.
Таким образом, вы можете сделать следующее:
- Генерация прайма и генератора внутри нити
- Передать основной генератор abd через готовый обратный вызов в событие
message
- Воссоздайте там объект diffie-hellman с сгенерированным простым числом и генератором.
Эти шаги будут получены из этого кода:
const spawn = require('threads').spawn;
const thread = spawn(function(input, done) {
const cryptot = require('crypto');
console.time('dh-thread');
const dh = cryptot.createDiffieHellman(2048);
console.timeEnd('dh-thread');
done({prime: dh.getPrime().toString('hex'), generator: dh.getGenerator().toString('hex')});
});
thread.send({p:null, g:null}).on('message', (response) => {
const cryptot = require('crypto');
const dh = cryptot.createDiffieHellman(response.prime, response.generator);
// Do whatever you want there
thread.kill();
}).on('error', (err)=>{
console.error(err);
}).on('exit', function() {
console.log('Worker has been terminated.');
});
Также, чтобы оправдать мое утверждение выше, позвольте мне немного изменить код, используя таймеры:
const spawn = require('threads').spawn;
const thread = spawn(function(input, done) {
const cryptot = require('crypto');
console.time('dh-thread');
const dh = cryptot.createDiffieHellman(2048);
console.timeEnd('dh-thread');
done({prime: dh.getPrime().toString('hex'), generator: dh.getGenerator().toString('hex')});
});
thread.send({p:null, g:null}).on('message', (response) => {
console.time('dh');
const cryptot = require('crypto');
const dh = cryptot.createDiffieHellman(response.prime, response.generator);
console.timeEnd('dh');
thread.kill();
}).on('error', (err)=>{
console.error(err);
}).on('exit', function() {
console.log('Worker has been terminated.');
});
В результате выполнения кода выше:
dh-thread: 12815.747ms
dh: 6.733ms
Worker has been terminated.
Как вы видите, генерация Диффи-Хеллмана без простого и генератора занимает WAY слишком долго вместо предоставленного простого и генератора.