Sample code for 30+ languages & platforms
PowerBuilder

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

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Compress
oleobject loo_Json
string ls_InPath
string ls_OutPath
string ls_InPath2
string ls_OutPath2
oleobject loo_Crypt
string ls_DecryptedPath
string ls_OutPath3

li_Success = 0

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

loo_Compress = create oleobject
li_rc = loo_Compress.ConnectToNewObject("Chilkat.Compression")
if li_rc < 0 then
    destroy loo_Compress
    MessageBox("Error","Connecting to COM object failed")
    return
end if
loo_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.
loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.UpdateString("cryptAlgorithm","aes")
loo_Json.UpdateString("cipherMode","cbc")
loo_Json.UpdateInt("keyLength",128)
loo_Json.UpdateInt("paddingScheme",0)
loo_Json.UpdateString("encodedIV","000102030405060708090A0B0C0D0E0F")
loo_Json.UpdateString("encodedKey","000102030405060708090A0B0C0D0E0F")

// Do file-to-file compression+encryption in a single call.
ls_InPath = "qa_data/largeFile.dat"
ls_OutPath = "c:/temp/qa_output/compressed_encrypted.dat"
li_Success = loo_Compress.CompressEncryptFile(loo_Json,ls_InPath,ls_OutPath)
if li_Success = 0 then
    Write-Debug loo_Compress.LastErrorText
    destroy loo_Compress
    destroy loo_Json
    return
end if

// We can do file-to-file decrypt/decompress like this:
ls_InPath2 = ls_OutPath
ls_OutPath2 = "c:/temp/qa_output/restored.dat"
li_Success = loo_Compress.DecryptDecompressFile(loo_Json,ls_InPath2,ls_OutPath2)
if li_Success = 0 then
    Write-Debug loo_Compress.LastErrorText
    destroy loo_Compress
    destroy loo_Json
    return
end if

// Note: The above decrypt + decompress is the equivalent of doing the same in these two steps:
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")

loo_Crypt.CryptAlgorithm = "aes"
loo_Crypt.CipherMode = "cbc"
loo_Crypt.KeyLength = 128
loo_Crypt.PaddingScheme = 0
loo_Crypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
loo_Crypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex")

ls_DecryptedPath = "c:/temp/qa_output/decrypted.dat"
li_Success = loo_Crypt.CkDecryptFile(ls_InPath2,ls_DecryptedPath)
if li_Success = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Compress
    destroy loo_Json
    destroy loo_Crypt
    return
end if

ls_OutPath3 = "c:/temp/qa_output/restored_in_two_steps.dat"
li_Success = loo_Compress.DecompressFile(ls_DecryptedPath,ls_OutPath3)
if li_Success = 0 then
    Write-Debug loo_Compress.LastErrorText
    destroy loo_Compress
    destroy loo_Json
    destroy loo_Crypt
    return
end if

Write-Debug "Success."


destroy loo_Compress
destroy loo_Json
destroy loo_Crypt