Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Streaming Encryption by Encrypting in Chunks
See more Encryption Examples
Encrypt data in chunks.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.Crypt2,
Chilkat.StringBuilder;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
crypt: TCrypt2;
txt1: string;
txt2: string;
txt3: string;
sbEncrypted: TStringBuilder;
i: Integer;
decryptedText: string;
begin
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
crypt := TCrypt2.Create;
crypt.CryptAlgorithm := 'aes';
crypt.CipherMode := 'cbc';
crypt.KeyLength := 128;
crypt.SetEncodedKey('000102030405060708090A0B0C0D0E0F','hex');
crypt.SetEncodedIV('000102030405060708090A0B0C0D0E0F','hex');
crypt.EncodingMode := 'hex';
txt1 := 'The quick brown fox jumped over the lazy dog.' + #13#10;
txt2 := '-' + #13#10;
txt3 := 'Done.' + #13#10;
sbEncrypted := TStringBuilder.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.)
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 i := 0 to 4 do
begin
sbEncrypted.Append(crypt.EncryptStringENC(txt1));
sbEncrypted.Append(crypt.EncryptStringENC(txt2));
end;
// Now encrypt the last chunk:
crypt.FirstChunk := False;
crypt.LastChunk := True;
sbEncrypted.Append(crypt.EncryptStringENC(txt3));
WriteLn(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;
decryptedText := crypt.DecryptStringENC(sbEncrypted.GetAsString());
WriteLn(decryptedText);
// Note: You may decrypt in N chunks by setting the FirstChunk
// and LastChunk properties prior to calling the Decrypt* methods.
crypt.Free;
sbEncrypted.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.