Sample code for 30+ languages & platforms
Perl

Compress and Encrypt a Large File (Low and Constant Memory Footprint)

See more Compression Examples

Demonstrates how to compress and encrypt a large file such that the memory footprint remains low and constant.

Note: This example requires Chilkat v9.5.0.99 or greater.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

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

$compress = chilkat::CkCompression->new();
$compress->put_Algorithm("deflate");

# Set encryption params.
# The possible values are the same as for the corresponding properties in the Chilkat Crypt2 class/object.
# The encoded IV and Key must be specified as hex.
$json = chilkat::CkJsonObject->new();
$json->UpdateString("cryptAlgorithm","aes");
$json->UpdateString("cipherMode","cbc");
$json->UpdateInt("keyLength",128);
$json->UpdateInt("paddingScheme",0);
$json->UpdateString("encodedIV","000102030405060708090A0B0C0D0E0F");
$json->UpdateString("encodedKey","000102030405060708090A0B0C0D0E0F");

# Do file-to-file compression+encryption in a single call.
$inPath = "qa_data/largeFile.dat";
$outPath = "c:/temp/qa_output/compressed_encrypted.dat";
$success = $compress->CompressEncryptFile($json,$inPath,$outPath);
if ($success == 0) {
    print $compress->lastErrorText() . "\r\n";
    exit;
}

# We can do file-to-file decrypt/decompress like this:
$inPath2 = $outPath;
$outPath2 = "c:/temp/qa_output/restored.dat";
$success = $compress->DecryptDecompressFile($json,$inPath2,$outPath2);
if ($success == 0) {
    print $compress->lastErrorText() . "\r\n";
    exit;
}

# Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
$crypt = chilkat::CkCrypt2->new();
$crypt->put_CryptAlgorithm("aes");
$crypt->put_CipherMode("cbc");
$crypt->put_KeyLength(128);
$crypt->put_PaddingScheme(0);
$crypt->SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex");
$crypt->SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex");

$decryptedPath = "c:/temp/qa_output/decrypted.dat";
$success = $crypt->CkDecryptFile($inPath2,$decryptedPath);
if ($success == 0) {
    print $crypt->lastErrorText() . "\r\n";
    exit;
}

$outPath3 = "c:/temp/qa_output/restored_in_two_steps.dat";
$success = $compress->DecompressFile($decryptedPath,$outPath3);
if ($success == 0) {
    print $compress->lastErrorText() . "\r\n";
    exit;
}

print "Success." . "\r\n";