![]() |
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) Streaming Encryption by Encrypting in ChunksEncrypt data in chunks.
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.