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:
- modulusLength: contiene un número. Es el tamaño de la clave en bits y se aplica solo al algoritmo RSA y DSA.
- publicExponent: contiene un número. Es el exponente público del algoritmo RSA. Su valor por defecto es 0x10001.
- divisorLength: Contiene un número. Es el tamaño de q en bits del algoritmo DSA.
- namedCurve: contiene una string. Es el nombre de la curva que se utilizará en el algoritmo EC.
- prime: contiene un búfer. Es el parámetro principal del algoritmo DH.
- primeLength: contiene un número. Es la longitud principal del algoritmo DH en bits.
- generador: Contiene un número. Es el generador personalizado del algoritmo DH. Su valor por defecto es 2.
- groupName: contiene una string. Es el nombre del grupo Diffie-Hellman del algoritmo DH.
- publicKeyEncoding: contiene una string.
- privateKeyEncoding: contiene un objeto.
- callback: Es una función, con parámetros publicKey, privateKey y err .
- err: contiene un error.
- publicKey: contiene una string, un búfer o un KeyObject.
- 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