Sample code for 30+ languages & platforms
Perl

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat Perl Downloads

Perl
use chilkat();

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

$crypt = chilkat::CkCrypt2->new();

$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 = chilkat::CkStringBuilder->new();

# 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(1);
$crypt->put_LastChunk(0);
$sbEncrypted->Append($crypt->encryptStringENC($txt1));

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

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

# Now encrypt the last chunk:
$crypt->put_FirstChunk(0);
$crypt->put_LastChunk(1);
$sbEncrypted->Append($crypt->encryptStringENC($txt3));

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

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

print $decryptedText . "\r\n";

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