Sample code for 30+ languages & platforms
Perl Requires Chilkat v9.5.0.99+

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.

Chilkat Perl Downloads

Chilkat2 Perl
use strict;
use warnings;
use Chilkat2;

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

my $compress = Chilkat2::Compression->new;
$compress->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.
my $json = Chilkat2::JsonObject->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.
my $inPath = 'qa_data/largeFile.dat';
my $outPath = 'c:/temp/qa_output/compressed_encrypted.dat';
my $success = $compress->CompressEncryptFile($json, $inPath, $outPath);
if (!$success) {
    print $compress->LastErrorText, "\n";
    exit;
}

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

# Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
my $crypt = Chilkat2::Crypt2->new;
$crypt->CryptAlgorithm('aes');
$crypt->CipherMode('cbc');
$crypt->KeyLength(128);
$crypt->PaddingScheme(0);
$crypt->SetEncodedIV('000102030405060708090A0B0C0D0E0F', 'hex');
$crypt->SetEncodedKey('000102030405060708090A0B0C0D0E0F', 'hex');

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

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

print "Success.\n";