El método diffieHellman.computeSecret() es una interfaz de programación de aplicaciones incorporada de la clase DiffieHellman dentro del módulo criptográfico que se utiliza para calcular la clave secreta DiffieHellman (dh).
Sintaxis:
diffieHellman.computeSecret(otherPublicKey[, inputEncoding][, outputEncoding])
Parámetros: este método acepta los siguientes parámetros.
- otherPublicKey: este método toma la clave pública de la otra parte como primer parámetro.
- inputEncoding: especifique la codificación de otherPublicKey . Si no se proporciona , se espera que otra clave pública sea Buffer, TypedArray o DataView .
- Codificación de salida: si se proporciona, se devuelve String; de lo contrario, se devuelve Buffer.
Valor devuelto: este método devuelve la clave secreta compartida de diffieHellman.
Ejemplo 1:
index.js
// Node.js program to demonstrate the // diffieHellman.computeSecret() method const crypto = require('crypto') // Instance of diffieHellman class... const alice = crypto.createDiffieHellman(512); const bob = crypto.createDiffieHellman( alice.getPrime(), alice.getGenerator()); // Generate otherPublicKey // Pass 'base64' as encoding parameter const aliceKey = alice.generateKeys('base64'); const bobKey = bob.generateKeys('base64'); // Exchange and generate the secret... // inputEncoding = 'base64' because otherPublicKey // is 'base64' encoded // Return value should be 'hex' encoded because // outputEncoding = 'hex' const aliceSecret = alice.computeSecret(bobKey, 'base64', 'hex'); const bobSecret = bob.computeSecret(aliceKey, 'base64', 'hex'); if( aliceSecret === bobSecret ) console.log(`Symmetric key : ${ aliceSecret }`)
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Symmetric key : da884ccb0e24bf7e748f66998550b f21f96b887e1f936478cdbc63b7806bd2403fd3aa28e5dbf58 bbabeb6f829dd86453eb0985b5ff593fcf7a8e1da20256b2a
Ejemplo 2: tome otro ejemplo sin proporcionar outputEncoding.
index.js
// Node.js program to demonstrate the // diffieHellman.computeSecret() method const crypto = require('crypto') // Instances of diffieHellman class const alice = crypto.createDiffieHellman('modp15'); const bob = crypto.createDiffieHellman('modp15'); // Pass 'base64' as encoding parameter const aliceKey = alice.generateKeys('base64'); // Pass 'hex' as encoding parameter const bobKey = bob.generateKeys('hex'); // Pass inputEncoding = 'hex' because Bob's key // 'hex' encocded // No outputEncoding provided // Return Buffer const aliceSecret = alice.computeSecret(bobKey, 'hex'); // Pass inputEncoding = 'base64' because Alice's // key 'base64' encocded // No outputEncoding provided // Return Buffer const bobSecret = bob.computeSecret(aliceKey, 'base64'); const isSymmetric = aliceSecret.equals(bobSecret) if ( isSymmetric ) console.log('Symmetric key : ', aliceSecret)
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Symmetric key : <Buffer 6d 1a 6c 00 34 6c>
Ejemplo 3: otro ejemplo sin proporcionar inputEncoding. Pase inputEncoding como nulo .
Nombre de archivo: index.js
Javascript
// Node.js program to demonstrate the // diffieHellman.computeSecret() method const crypto = require('crypto') // Instances of diffieHellman class const alice = crypto.createDiffieHellman('modp15'); const bob = crypto.createDiffieHellman('modp15'); // Generate Key alice.generateKeys(); bob.generateKeys(); // Compute Secret // inputEncoding is null // otherPublicKey expected to be Buffer const aliceSecret = alice.computeSecret( bob.getPublicKey() , null, 'base64'); const bobSecret = bob.computeSecret( alice.getPublicKey(), null, 'base64'); if (aliceSecret === bobSecret) console.log(`Symmetric key : ${ aliceSecret }`)
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Symmetric key : abLoALX9
Referencia: