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