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