Sample code for 30+ languages & platforms
Lianja

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

Lianja
llSuccess = .F.

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

loCompress = createobject("CkCompression")
loCompress.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.
loJson = createobject("CkJsonObject")
loJson.UpdateString("cryptAlgorithm","aes")
loJson.UpdateString("cipherMode","cbc")
loJson.UpdateInt("keyLength",128)
loJson.UpdateInt("paddingScheme",0)
loJson.UpdateString("encodedIV","000102030405060708090A0B0C0D0E0F")
loJson.UpdateString("encodedKey","000102030405060708090A0B0C0D0E0F")

// Do file-to-file compression+encryption in a single call.
lcInPath = "qa_data/largeFile.dat"
lcOutPath = "c:/temp/qa_output/compressed_encrypted.dat"
llSuccess = loCompress.CompressEncryptFile(loJson,lcInPath,lcOutPath)
if (llSuccess = .F.) then
    ? loCompress.LastErrorText
    release loCompress
    release loJson
    return
endif

// We can do file-to-file decrypt/decompress like this:
lcInPath2 = lcOutPath
lcOutPath2 = "c:/temp/qa_output/restored.dat"
llSuccess = loCompress.DecryptDecompressFile(loJson,lcInPath2,lcOutPath2)
if (llSuccess = .F.) then
    ? loCompress.LastErrorText
    release loCompress
    release loJson
    return
endif

// Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
loCrypt = createobject("CkCrypt2")
loCrypt.CryptAlgorithm = "aes"
loCrypt.CipherMode = "cbc"
loCrypt.KeyLength = 128
loCrypt.PaddingScheme = 0
loCrypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
loCrypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex")

lcDecryptedPath = "c:/temp/qa_output/decrypted.dat"
llSuccess = loCrypt.CkDecryptFile(lcInPath2,lcDecryptedPath)
if (llSuccess = .F.) then
    ? loCrypt.LastErrorText
    release loCompress
    release loJson
    release loCrypt
    return
endif

lcOutPath3 = "c:/temp/qa_output/restored_in_two_steps.dat"
llSuccess = loCompress.DecompressFile(lcDecryptedPath,lcOutPath3)
if (llSuccess = .F.) then
    ? loCompress.LastErrorText
    release loCompress
    release loJson
    release loCrypt
    return
endif

? "Success."


release loCompress
release loJson
release loCrypt