Sample code for 30+ languages & platforms
Dart

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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

  final crypt = CkCrypt2();

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

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

  final fileToDecrypt = 'c:/temp/qa_output/hamlet.enc';
  final facIn = CkFileAccess();
  try {
    facIn.openForRead(fileToDecrypt);
  } on ChilkatException {
    print('Failed to open file to be decrytped.');
    return;
  }

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

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

  final bd = CkBinData();
  final bdDecrypted = CkBinData();

  var 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');
}