Método Node.js crypto.generateKeyPair()

El método crypto.generateKeyPair() es una interfaz de programación de aplicaciones incorporada del módulo criptográfico que se utiliza para generar un nuevo par de claves asimétricas del tipo especificado. Por ejemplo, los tipos de clave admitidos actualmente son RSA, DSA, EC, Ed25519, Ed448, X25519, X448 y DH . Además, si la opción publicKeyEncoding o privateKeyEncoding se indica aquí, entonces esta función actúa como si se hubiera llamado a keyObject.export() en su salida. De lo contrario, la parte particular de la clave se devuelve como KeyObject .
Sin embargo, se sugiere codificar las claves públicas como ‘spki’ y las claves privadas como ‘pkcs8’ con cifrado para almacenamiento a largo plazo.

Sintaxis:

crypto.generateKeyPair( type, options, callback )

Parámetros: Este método acepta tres parámetros como se mencionó anteriormente y se describe a continuación:

  • tipo: contiene una string y debe incluir uno o más de los siguientes algoritmos: ‘rsa’, ‘dsa’, ‘ec’, ‘ed25519’, ‘ed448’, ‘x25519’, ‘x448’ o ‘dh’ .
  • opciones: es de tipo objeto. Puede contener los siguientes parámetros:
    1. modulusLength: contiene un número. Es el tamaño de la clave en bits y se aplica solo al algoritmo RSA y DSA.
    2. publicExponent: contiene un número. Es el exponente público del algoritmo RSA. Su valor por defecto es 0x10001.
    3. divisorLength: Contiene un número. Es el tamaño de q en bits del algoritmo DSA.
    4. namedCurve: contiene una string. Es el nombre de la curva que se utilizará en el algoritmo EC.
    5. prime: contiene un búfer. Es el parámetro principal del algoritmo DH.
    6. primeLength: contiene un número. Es la longitud principal del algoritmo DH en bits.
    7. generador: Contiene un número. Es el generador personalizado del algoritmo DH. Su valor por defecto es 2.
    8. groupName: contiene una string. Es el nombre del grupo Diffie-Hellman del algoritmo DH.
    9. publicKeyEncoding: contiene una string.
    10. privateKeyEncoding: contiene un objeto.
  • callback: Es una función, con parámetros publicKey, privateKey y err .
    1. err: contiene un error.
    2. publicKey: contiene una string, un búfer o un KeyObject.
    3. privateKey: contiene una string, un búfer o un KeyObject.

Valor devuelto: Devuelve un nuevo par de claves asimétricas del tipo dado.

Los siguientes ejemplos ilustran el uso del método crypto.generateKeyPair() en Node.js:

Ejemplo 1:

// Node.js program to demonstrate the
// crypto.generateKeyPair() method
  
// Including generateKeyPair from crypto module
const { generateKeyPair } = require('crypto');
  
// Calling generateKeyPair() method
// with its parameters
generateKeyPair('rsa', {
  modulusLength: 530,    // options
  publicExponent: 0x10101,
  publicKeyEncoding: {
    type: 'pkcs1',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der',
    cipher: 'aes-192-cbc',
    passphrase: 'GeeksforGeeks is a CS-Portal!'
  }
}, (err, publicKey, privateKey) => { // Callback function
       if(!err)
       {
         // Prints new asymmetric key pair
         console.log("Public Key is : ", publicKey);
         console.log();
         console.log("Private Key is: ", privateKey);
       }
       else
       {
         // Prints error
         console.log("Errr is: ", err);
       }
         
  });

Producción:

Public Key is : <Buffer 30 4a 02 43 03 12 b9
4c 1a 3f 96 07 51 c6 31 02d7 11 e2 e3 a5 2b 0c
7c 18 55 88 39 04 4c 86 e2 77 c4 29 47 82 2c 5b
4b 9e f3 e8 83 4b 5d 4b 31 e7 d5 ... >

Private Key is: <Buffer 30 82 01 cd 30 57 06
09 2a 86 48 86 f7 0d 01 050d 30 4a 30 29 06 09
2a 86 48 86 f7 0d 01 05 0c 30 1c 04 08 e0 31 2b
a0 38 82 e1 db 02 02 08 00 30 0c ... >

Ejemplo 2:

// Node.js program to demonstrate the
// crypto.generateKeyPair() method
  
// Including generateKeyPair from crypto module
const { generateKeyPair } = require('crypto');
  
// Calling generateKeyPair() method
// with its parameters
generateKeyPair('ec', {
  namedCurve: 'secp256k1',   // Options
  publicKeyEncoding: {
    type: 'spki',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der'
  }
},
 (err, publicKey, privateKey) => { // Callback function
       if(!err)
       {
         // Prints new asymmetric key
         // pair after encoding
         console.log("Public Key is: ",
                  publicKey.toString('hex'));
         console.log();
         console.log("Private Key is: ",
                 privateKey.toString('hex'));
       }
       else
       {
         // Prints error
         console.log("Errr is: ", err);
       }
         
  });

Producción:

Public Key is:  3056301006072a8648ce3d020106052b8104000a0342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15

Private Key is:  308184020100301006072a8648ce3d020106052b8104000a046d306b0201010420326b340a964512bfc3e010850ff05e077b2f016fce9eded11f40643e4231efc4a1440342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15

Referencia: https://nodejs.org/api/crypto.html#crypto_crypto_generatekeypair_type_options_callback

Publicación traducida automáticamente

Artículo escrito por nidhi1352singh 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 *