Sample code for 30+ languages & platforms
PowerShell

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 PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

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

$compress = New-Object Chilkat.Compression
$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.
$json = New-Object Chilkat.JsonObject
$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 -eq $false) {
    $($compress.LastErrorText)
    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 -eq $false) {
    $($compress.LastErrorText)
    exit
}

# Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
$crypt = New-Object Chilkat.Crypt2
$crypt.CryptAlgorithm = "aes"
$crypt.CipherMode = "cbc"
$crypt.KeyLength = 128
$crypt.PaddingScheme = 0
$crypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
$crypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex")

$decryptedPath = "c:/temp/qa_output/decrypted.dat"
$success = $crypt.CkDecryptFile($inPath2,$decryptedPath)
if ($success -eq $false) {
    $($crypt.LastErrorText)
    exit
}

$outPath3 = "c:/temp/qa_output/restored_in_two_steps.dat"
$success = $compress.DecompressFile($decryptedPath,$outPath3)
if ($success -eq $false) {
    $($compress.LastErrorText)
    exit
}

$("Success.")