Sample code for 30+ languages & platforms
React Native

Decrypt File in Chunks using 256-bit AES

See more Encryption Examples

Shows how to decrypt a file chunk-by-chunk using FirstChunk/LastChunk properties and accumulate the results in memory with a Chilkat BinData object.

Chilkat React Native Downloads

React Native
import { BinData, Crypt2, FileAccess } from '@chilkat/react-native'

function chilkatExample() {
  // This example assumes the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // This example decrypts the file previously encrypted in this example:
  // Encrypt File in Chunks using AES CBC

  const crypt = new Crypt2();

  crypt.cryptAlgorithm = 'aes';
  crypt.cipherMode = 'cbc';
  crypt.keyLength = 256;

  crypt.setEncodedKey('000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F', 'hex');
  crypt.setEncodedIV('000102030405060708090A0B0C0D0E0F', 'hex');

  const fileToDecrypt = 'c:/temp/qa_output/hamlet.enc';
  const facIn = new FileAccess();
  try {
    facIn.openForRead(fileToDecrypt);
  } catch {
    console.log('Failed to open file to be decrytped.');
    return;
  }

  // Let's decrypt in 32000 byte chunks.
  const chunkSize = 32000;
  const numChunks = facIn.getNumBlocks(chunkSize);

  crypt.firstChunk = true;
  crypt.lastChunk = false;

  const bd = new BinData();
  const bdDecrypted = new BinData();

  let i = 0;
  while (i < numChunks) {
    i++;
    if (i === numChunks) {
      crypt.lastChunk = true;
    }

    // Read the next chunk from the file.
    // The last chunk will be whatever amount remains in the file..
    bd.clear();
    facIn.fileReadBd(chunkSize, bd);

    // Decrypt this chunk.
    crypt.decryptBd(bd);
    // Accumulate the decrypted chunks.
    bdDecrypted.appendBd(bd);

    crypt.firstChunk = false;
  }

  // Make sure both FirstChunk and LastChunk are restored to true after
  // encrypting or decrypting in chunks.  Otherwise subsequent encryptions/decryptions
  // will produce unexpected results.
  crypt.firstChunk = true;
  crypt.lastChunk = true;

  facIn.fileClose();

  // The fully decrypted file is contained in bdDecrypted.
  // You can save to a file if desired, or use the decrypted data in your application directly from bdDecrypted.
  bdDecrypted.writeFile('c:/temp/qa_output/hamlet_decrypted.xml');
}