Sample code for 30+ languages & platforms
PHP ActiveX

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat PHP ActiveX Downloads

PHP ActiveX
<?php

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$crypt = new COM("Chilkat.Crypt2");

$crypt->CryptAlgorithm = 'aes';
$crypt->CipherMode = 'cbc';
$crypt->KeyLength = 128;

$crypt->SetEncodedKey('000102030405060708090A0B0C0D0E0F','hex');
$crypt->SetEncodedIV('000102030405060708090A0B0C0D0E0F','hex');

$crypt->EncodingMode = 'hex';
$txt1 = 'The quick brown fox jumped over the lazy dog.\r\n';
$txt2 = '-\r\n';
$txt3 = 'Done.\r\n';

$sbEncrypted = new COM("Chilkat.StringBuilder");

// 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.)
$crypt->FirstChunk = 1;
$crypt->LastChunk = 0;
$sbEncrypted->Append($crypt->encryptStringENC($txt1));

// Encrypt the 2nd chunk
$crypt->FirstChunk = 0;
$crypt->LastChunk = 0;
$sbEncrypted->Append($crypt->encryptStringENC($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...
$crypt->FirstChunk = 0;
$crypt->LastChunk = 0;

for ($i = 0; $i <= 4; $i++) {
    $sbEncrypted->Append($crypt->encryptStringENC($txt1));
    $sbEncrypted->Append($crypt->encryptStringENC($txt2));
}

// Now encrypt the last chunk:
$crypt->FirstChunk = 0;
$crypt->LastChunk = 1;
$sbEncrypted->Append($crypt->encryptStringENC($txt3));

print $sbEncrypted->getAsString() . "\n";

// Now decrypt in one call.
// (The data we're decrypting is both the first AND last chunk.)  
$crypt->FirstChunk = 1;
$crypt->LastChunk = 1;
$decryptedText = $crypt->decryptStringENC($sbEncrypted->getAsString());

print $decryptedText . "\n";

// Note: You may decrypt in N chunks by setting the FirstChunk
// and LastChunk properties prior to calling the Decrypt* methods

?>