Delphi DLL
Delphi DLL
Streaming Encryption by Encrypting in Chunks
See more Encryption Examples
Encrypt data in chunks.Chilkat Delphi DLL Downloads
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;