Método Node.js diffieHellman.computeSecret()

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:

https://nodejs.org/api/crypto.html#crypto_diffiehellman_computesecret_otherpublickey_inputencoding_outputencoding

Publicación traducida automáticamente

Artículo escrito por braktim99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *