![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi DLL) Encrypting a Data StreamThis example illustrates encrypting a large dataset using symmetric encryption algorithms like
You can provide data chunks smaller than the encryption algorithm's block size. For example, AES uses 16-byte blocks;
Chilkat handles the buffering of data as needed. If a data chunk smaller than the block size is provided, an empty string (or 0 bytes) is returned, and the data is buffered to be combined with subsequent chunks. The final chunk is padded to the algorithm's block size (as determined by the Chunk-wise decryption follows the same procedure as chunk-wise encryption.
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; |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.