El método crypto.createDecipheriv() es una interfaz de programación de aplicaciones incorporada del módulo criptográfico que se utiliza para crear un objeto Decipher , con el algoritmo , la clave y el vector de inicialización indicados, es decir, (iv).
Sintaxis:
crypto.createDecipheriv( algorithm, key, iv, options )
Parámetros: Este método acepta cuatro parámetros como se mencionó anteriormente y se describe a continuación:
- algoritmo: es un valor de tipo string que depende de OpenSSL . Los ejemplos son aes192 , aes256 , etc.
- clave: es la clave sin formato que utiliza el algoritmo y iv. Contiene la string , Buffer , TypedArray o DataView . La clave puede ser un KeyObject opcionalmente de tipo secreto.
- iv: Es un vector de inicialización que debe ser incierto y muy único. Sin embargo, un iv ideal será criptográficamente aleatorio. No necesita ser secreto. Puede contener datos de tipo string , Buffer , TypedArray o DataView . Si el cifrado no requiere iv , entonces puede ser nulo .
- opciones: es un parámetro opcional que se utiliza para controlar el comportamiento de la secuencia. Es opcional excepto cuando se utiliza un cifrado en modo CCM u OCB (por ejemplo, ‘aes-128-ccm’). En ese caso, se requiere la opción authTagLength que define la longitud (bytes) de la etiqueta de autenticación mientras que, en el modo GCM , la opción authTagLength no es necesaria pero se puede usar para establecer la longitud de la etiqueta de autenticación que devolverá el método getAuthTag() y el valor predeterminado es de 16 bytes.
Valor devuelto: Devuelve el objeto Decipher .
Los siguientes ejemplos ilustran el uso del método crypto.createDecipheriv() en Node.js:
Ejemplo 1:
// Node.js program to demonstrate the // crypto.createDecipheriv() method // Includes crypto module const crypto = require('crypto'); // Defining algorithm const algorithm = 'aes-192-cbc'; // Defining password const password = 'bncaskdbvasbvlaslslasfhj'; // Defining key const key = crypto.scryptSync(password, 'GfG', 24); // Defininf iv const iv = Buffer.alloc(16, 0); // Creating decipher const decipher = crypto.createDecipheriv(algorithm, key, iv); // Declaring decrypted let decrypted = ''; // Reading data decipher.on('readable', () => { let chunk; while (null !== (chunk = decipher.read())) { decrypted += chunk.toString('utf8'); } }); // Handling end event decipher.on('end', () => { console.log(decrypted); }); // Encrypted data which is to be decrypted const encrypted = 'MfHwhG/WPv+TIbG/qM78qA=='; decipher.write(encrypted, 'base64'); decipher.end(); console.log("done");
Producción:
done CS-Portal
Ejemplo 2:
// Node.js program to demonstrate the // crypto.createDecipheriv() method // Includes crypto module const crypto = require('crypto'); // Difining algorithm const algorithm = 'aes-256-cbc'; // Defining key const key = crypto.randomBytes(32); // Defining iv const iv = crypto.randomBytes(16); // An encrypt function function encrypt(text) { // Creating Cipheriv with its parameter let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv); // Updating text let encrypted = cipher.update(text); // Using concatenation encrypted = Buffer.concat([encrypted, cipher.final()]); // Returning iv and encrypted data return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') }; } // A decrypt function function decrypt(text) { let iv = Buffer.from(text.iv, 'hex'); let encryptedText = Buffer.from(text.encryptedData, 'hex'); // Creating Decipher let decipher = crypto.createDecipheriv( 'aes-256-cbc', Buffer.from(key), iv); // Updating encrypted text let decrypted = decipher.update(encryptedText); decrypted = Buffer.concat([decrypted, decipher.final()]); // returns data after decryption return decrypted.toString(); } // Encrypts output var output = encrypt("GeeksforGeeks"); console.log(output); // Decrypts output console.log(decrypt(output));
Producción:
{ iv: '6bbc47a2756d6d6bf315cfd3cc0b711a', encryptedData: 'fae9a6fb31c0b0668da8c3be1b1da81a' } GeeksforGeeks
Referencia: https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv_options
Publicación traducida automáticamente
Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA