Instances of the Cipheriv class are used to encrypt data. The class can be used in one of two ways:
- As a 
streamthat is both readable and writable, where plain unencrypted data is written to produce encrypted data on the readable side, or - Using the 
cipher.update()andcipher.final()methods to produce the encrypted data. 
The createCipheriv method is used to create Cipheriv instances. Cipheriv objects are not to be created directly using the new keyword.
Example: Using Cipheriv objects as streams:
const {
  scrypt,
  randomFill,
  createCipheriv,
} = await import('node:crypto');
const algorithm = 'aes-192-cbc';
const password = 'Password used to generate key';
// First, we'll generate the key. The key length is dependent on the algorithm.
// In this case for aes192, it is 24 bytes (192 bits).
scrypt(password, 'salt', 24, (err, key) => {
  if (err) throw err;
  // Then, we'll generate a random initialization vector
  randomFill(new Uint8Array(16), (err, iv) => {
    if (err) throw err;
    // Once we have the key and iv, we can create and use the cipher...
    const cipher = createCipheriv(algorithm, key, iv);
    let encrypted = '';
    cipher.setEncoding('hex');
    cipher.on('data', (chunk) => encrypted += chunk);
    cipher.on('end', () => console.log(encrypted));
    cipher.write('some clear text data');
    cipher.end();
  });
});
Example: Using Cipheriv and piped streams:
import {
  createReadStream,
  createWriteStream,
} from 'node:fs';
import {
  pipeline,
} from 'node:stream';
const {
  scrypt,
  randomFill,
  createCipheriv,
} = await import('node:crypto');
const algorithm = 'aes-192-cbc';
const password = 'Password used to generate key';
// First, we'll generate the key. The key length is dependent on the algorithm.
// In this case for aes192, it is 24 bytes (192 bits).
scrypt(password, 'salt', 24, (err, key) => {
  if (err) throw err;
  // Then, we'll generate a random initialization vector
  randomFill(new Uint8Array(16), (err, iv) => {
    if (err) throw err;
    const cipher = createCipheriv(algorithm, key, iv);
    const input = createReadStream('test.js');
    const output = createWriteStream('test.enc');
    pipeline(input, cipher, output, (err) => {
      if (err) throw err;
    });
  });
});
Example: Using the cipher.update() and cipher.final() methods:
const {
  scrypt,
  randomFill,
  createCipheriv,
} = await import('node:crypto');
const algorithm = 'aes-192-cbc';
const password = 'Password used to generate key';
// First, we'll generate the key. The key length is dependent on the algorithm.
// In this case for aes192, it is 24 bytes (192 bits).
scrypt(password, 'salt', 24, (err, key) => {
  if (err) throw err;
  // Then, we'll generate a random initialization vector
  randomFill(new Uint8Array(16), (err, iv) => {
    if (err) throw err;
    const cipher = createCipheriv(algorithm, key, iv);
    let encrypted = cipher.update('some clear text data', 'utf8', 'hex');
    encrypted += cipher.final('hex');
    console.log(encrypted);
  });
});