Sample code for 30+ languages & platforms
Dart

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat Dart Downloads

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

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final crypt = CkCrypt2();

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

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

  crypt.encodingMode = 'hex';
  final txt1 = 'The quick brown fox jumped over the lazy dog.\r\n';
  final txt2 = '-\r\n';
  final txt3 = 'Done.\r\n';

  final sbEncrypted = CkStringBuilder();

  // Encrypt the 1st chunk:
  // (don't worry about feeding the data to the encryptor in 
  // exact multiples of the encryption algorithm's block size.
  // Chilkat will buffer the data.)
  crypt.firstChunk = true;
  crypt.lastChunk = false;
  sbEncrypted.append(crypt.encryptStringENC(txt1));

  // Encrypt the 2nd chunk
  crypt.firstChunk = false;
  crypt.lastChunk = false;
  sbEncrypted.append(crypt.encryptStringENC(txt2));

  // Now encrypt N more chunks...
  // Remember -- we're doing this in CBC mode, so each call
  // to the encrypt method depends on the state from previous
  // calls...
  crypt.firstChunk = false;
  crypt.lastChunk = false;
  for (var i = 0; i <= 4; i++) {
    sbEncrypted.append(crypt.encryptStringENC(txt1));
    sbEncrypted.append(crypt.encryptStringENC(txt2));
  }

  // Now encrypt the last chunk:
  crypt.firstChunk = false;
  crypt.lastChunk = true;
  sbEncrypted.append(crypt.encryptStringENC(txt3));

  print(sbEncrypted.getAsString());

  // Now decrypt in one call.
  // (The data we're decrypting is both the first AND last chunk.)  
  crypt.firstChunk = true;
  crypt.lastChunk = true;
  final decryptedText = crypt.decryptStringENC(sbEncrypted.getAsString());

  print(decryptedText);

  // Note: You may decrypt in N chunks by setting the FirstChunk
  // and LastChunk properties prior to calling the Decrypt* methods.
}