![]() |
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
(Unicode C) 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.
#include <C_CkCrypt2W.h> #include <C_CkStringBuilderW.h> void ChilkatSample(void) { HCkCrypt2W crypt; const wchar_t *txt1; const wchar_t *txt2; const wchar_t *txt3; HCkStringBuilderW sbEncrypted; int i; const wchar_t *decryptedText; // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. crypt = CkCrypt2W_Create(); CkCrypt2W_putCryptAlgorithm(crypt,L"aes"); CkCrypt2W_putCipherMode(crypt,L"cbc"); CkCrypt2W_putKeyLength(crypt,128); CkCrypt2W_SetEncodedKey(crypt,L"000102030405060708090A0B0C0D0E0F",L"hex"); CkCrypt2W_SetEncodedIV(crypt,L"000102030405060708090A0B0C0D0E0F",L"hex"); CkCrypt2W_putEncodingMode(crypt,L"hex"); txt1 = L"The quick brown fox jumped over the lazy dog.\r\n"; txt2 = L"-\r\n"; txt3 = L"Done.\r\n"; sbEncrypted = CkStringBuilderW_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.) CkCrypt2W_putFirstChunk(crypt,TRUE); CkCrypt2W_putLastChunk(crypt,FALSE); CkStringBuilderW_Append(sbEncrypted,CkCrypt2W_encryptStringENC(crypt,txt1)); // Encrypt the 2nd chunk CkCrypt2W_putFirstChunk(crypt,FALSE); CkCrypt2W_putLastChunk(crypt,FALSE); CkStringBuilderW_Append(sbEncrypted,CkCrypt2W_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... CkCrypt2W_putFirstChunk(crypt,FALSE); CkCrypt2W_putLastChunk(crypt,FALSE); for (i = 0; i <= 4; i++) { CkStringBuilderW_Append(sbEncrypted,CkCrypt2W_encryptStringENC(crypt,txt1)); CkStringBuilderW_Append(sbEncrypted,CkCrypt2W_encryptStringENC(crypt,txt2)); } // Now encrypt the last chunk: CkCrypt2W_putFirstChunk(crypt,FALSE); CkCrypt2W_putLastChunk(crypt,TRUE); CkStringBuilderW_Append(sbEncrypted,CkCrypt2W_encryptStringENC(crypt,txt3)); wprintf(L"%s\n",CkStringBuilderW_getAsString(sbEncrypted)); // Now decrypt in one call. // (The data we're decrypting is both the first AND last chunk.) CkCrypt2W_putFirstChunk(crypt,TRUE); CkCrypt2W_putLastChunk(crypt,TRUE); decryptedText = CkCrypt2W_decryptStringENC(crypt,CkStringBuilderW_getAsString(sbEncrypted)); wprintf(L"%s\n",decryptedText); // Note: You may decrypt in N chunks by setting the FirstChunk // and LastChunk properties prior to calling the Decrypt* methods CkCrypt2W_Dispose(crypt); CkStringBuilderW_Dispose(sbEncrypted); } |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.