Node.js | crypto.createDecipheriv () Метод
Опубликовано: 2 Августа, 2021
Метод crypto.createDecipheriv () - это встроенный интерфейс прикладного программирования криптомодуля, который используется для создания объекта Decipher с указанным алгоритмом , ключом и вектором инициализации, т. Е. (Iv).
Синтаксис:
crypto.createDecipheriv (алгоритм, ключ, iv, параметры)
Параметры: этот метод принимает четыре параметра, как указано выше и описано ниже:
- алгоритм: это значение строкового типа, зависящее от OpenSSL . Примеры: aes192 , aes256 и т. Д.
- key: это необработанный ключ, который используется алгоритмом, и iv. Он содержит строку , буфер , TypedArray или DataView . Ключом может быть KeyObject ( необязательно) типа secret.
- iv: Это вектор инициализации, который должен быть неопределенным и очень уникальным. Однако идеальный iv будет криптографически случайным. Это не должно быть секретом. Он может содержать данные типа String , Buffer , TypedArray или DataView . Если шифру не требуется iv, тогда он может быть нулевым .
- options: это необязательный параметр, который используется для управления поведением потока. Это необязательно, кроме случаев, когда в режиме CCM или OCB используется шифр (например, «aes-128-ccm»). В этом случае требуется опция authTagLength, которая определяет длину (байты) тега аутентификации, тогда как в режиме GCM параметр authTagLength не требуется, но его можно использовать для установки длины тега аутентификации, который будет возвращен метод getAuthTag (), а значение по умолчанию - 16 байт.
Возвращаемое значение: возвращает объект Decipher.
Примеры ниже иллюстрируют использование метода crypto.createDecipheriv () в Node.js:
Пример 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" ); |
Выход:
Выполнено CS-портал
Пример 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)); |
Выход:
{iv: '6bbc47a2756d6d6bf315cfd3cc0b711a', encryptedData: 'fae9a6fb31c0b0668da8c3be1b1da81a'} GeeksforGeeks
Ссылка: https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv_options