Sample code for 30+ languages & platforms
Lianja

Decrypt File in Chunks using 256-bit AES

See more Encryption Examples

Shows how to decrypt a file chunk-by-chunk using FirstChunk/LastChunk properties and accumulate the results in memory with a Chilkat BinData object.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

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

// This example decrypts the file previously encrypted in this example:
// Encrypt File in Chunks using AES CBC

loCrypt = createobject("CkCrypt2")

loCrypt.CryptAlgorithm = "aes"
loCrypt.CipherMode = "cbc"
loCrypt.KeyLength = 256

loCrypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F","hex")
loCrypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")

lcFileToDecrypt = "c:/temp/qa_output/hamlet.enc"
loFacIn = createobject("CkFileAccess")
llSuccess = loFacIn.OpenForRead(lcFileToDecrypt)
if (llSuccess <> .T.) then
    ? "Failed to open file to be decrytped."
    release loCrypt
    release loFacIn
    return
endif

// Let's decrypt in 32000 byte chunks.
lnChunkSize = 32000
lnNumChunks = loFacIn.GetNumBlocks(lnChunkSize)

loCrypt.FirstChunk = .T.
loCrypt.LastChunk = .F.

loBd = createobject("CkBinData")
loBdDecrypted = createobject("CkBinData")

i = 0
do while i < lnNumChunks
    i = i + 1
    if (i = lnNumChunks) then
        loCrypt.LastChunk = .T.
    endif

    // Read the next chunk from the file.
    // The last chunk will be whatever amount remains in the file..
    loBd.Clear()
    loFacIn.FileReadBd(lnChunkSize,loBd)

    // Decrypt this chunk.
    loCrypt.DecryptBd(loBd)
    // Accumulate the decrypted chunks.
    loBdDecrypted.AppendBd(loBd)

    loCrypt.FirstChunk = .F.
enddo

// Make sure both FirstChunk and LastChunk are restored to .T. after
// encrypting or decrypting in chunks.  Otherwise subsequent encryptions/decryptions
// will produce unexpected results.
loCrypt.FirstChunk = .T.
loCrypt.LastChunk = .T.

loFacIn.FileClose()

// The fully decrypted file is contained in bdDecrypted.
// You can save to a file if desired, or use the decrypted data in your application directly from bdDecrypted.
loBdDecrypted.WriteFile("c:/temp/qa_output/hamlet_decrypted.xml")


release loCrypt
release loFacIn
release loBd
release loBdDecrypted