Sample code for 30+ languages & platforms
Unicode C

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat Unicode C Downloads

Unicode C
#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);

    }