Sample code for 30+ languages & platforms
Delphi DLL

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Crypt2, StringBuilder;

...

procedure TForm1.Button1Click(Sender: TObject);
var
crypt: HCkCrypt2;
txt1: PWideChar;
txt2: PWideChar;
txt3: PWideChar;
sbEncrypted: HCkStringBuilder;
i: Integer;
decryptedText: PWideChar;

begin
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

crypt := CkCrypt2_Create();

CkCrypt2_putCryptAlgorithm(crypt,'aes');
CkCrypt2_putCipherMode(crypt,'cbc');
CkCrypt2_putKeyLength(crypt,128);

CkCrypt2_SetEncodedKey(crypt,'000102030405060708090A0B0C0D0E0F','hex');
CkCrypt2_SetEncodedIV(crypt,'000102030405060708090A0B0C0D0E0F','hex');

CkCrypt2_putEncodingMode(crypt,'hex');
txt1 := 'The quick brown fox jumped over the lazy dog.' + #13#10;
txt2 := '-' + #13#10;
txt3 := 'Done.' + #13#10;

sbEncrypted := CkStringBuilder_Create();

// 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.)
CkCrypt2_putFirstChunk(crypt,True);
CkCrypt2_putLastChunk(crypt,False);
CkStringBuilder_Append(sbEncrypted,CkCrypt2__encryptStringENC(crypt,txt1));

// Encrypt the 2nd chunk
CkCrypt2_putFirstChunk(crypt,False);
CkCrypt2_putLastChunk(crypt,False);
CkStringBuilder_Append(sbEncrypted,CkCrypt2__encryptStringENC(crypt,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...
CkCrypt2_putFirstChunk(crypt,False);
CkCrypt2_putLastChunk(crypt,False);

for i := 0 to 4 do
  begin
    CkStringBuilder_Append(sbEncrypted,CkCrypt2__encryptStringENC(crypt,txt1));
    CkStringBuilder_Append(sbEncrypted,CkCrypt2__encryptStringENC(crypt,txt2));
  end;

// Now encrypt the last chunk:
CkCrypt2_putFirstChunk(crypt,False);
CkCrypt2_putLastChunk(crypt,True);
CkStringBuilder_Append(sbEncrypted,CkCrypt2__encryptStringENC(crypt,txt3));

Memo1.Lines.Add(CkStringBuilder__getAsString(sbEncrypted));

// Now decrypt in one call.
// (The data we're decrypting is both the first AND last chunk.)  
CkCrypt2_putFirstChunk(crypt,True);
CkCrypt2_putLastChunk(crypt,True);
decryptedText := CkCrypt2__decryptStringENC(crypt,CkStringBuilder__getAsString(sbEncrypted));

Memo1.Lines.Add(decryptedText);

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

CkCrypt2_Dispose(crypt);
CkStringBuilder_Dispose(sbEncrypted);

end;