Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loCrypt
LOCAL lcFileToDecrypt
LOCAL loFacIn
LOCAL lnChunkSize
LOCAL lnNumChunks
LOCAL loBd
LOCAL loBdDecrypted
LOCAL i

lnSuccess = 0

* 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('Chilkat.Crypt2')

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('Chilkat.FileAccess')
lnSuccess = loFacIn.OpenForRead(lcFileToDecrypt)
IF (lnSuccess <> 1) THEN
    ? "Failed to open file to be decrytped."
    RELEASE loCrypt
    RELEASE loFacIn
    CANCEL
ENDIF

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

loCrypt.FirstChunk = 1
loCrypt.LastChunk = 0

loBd = CreateObject('Chilkat.BinData')
loBdDecrypted = CreateObject('Chilkat.BinData')

i = 0
DO WHILE i < lnNumChunks
    i = i + 1
    IF (i = lnNumChunks) THEN
        loCrypt.LastChunk = 1
    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 = 0
ENDDO

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

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