Sample code for 30+ languages & platforms
PHP Extension

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

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

$crypt = new CkCrypt2();

$crypt->put_CryptAlgorithm('aes');
$crypt->put_CipherMode('cbc');
$crypt->put_KeyLength(128);

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

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

$sbEncrypted = new CkStringBuilder();

// 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->put_FirstChunk(true);
$crypt->put_LastChunk(false);
$sbEncrypted->Append($crypt->encryptStringENC($txt1));

// Encrypt the 2nd chunk
$crypt->put_FirstChunk(false);
$crypt->put_LastChunk(false);
$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->put_FirstChunk(false);
$crypt->put_LastChunk(false);

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

// Now encrypt the last chunk:
$crypt->put_FirstChunk(false);
$crypt->put_LastChunk(true);
$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->put_FirstChunk(true);
$crypt->put_LastChunk(true);
$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

?>