Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 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
set crypt [new_CkCrypt2]
CkCrypt2_put_CryptAlgorithm $crypt "aes"
CkCrypt2_put_CipherMode $crypt "cbc"
CkCrypt2_put_KeyLength $crypt 256
CkCrypt2_SetEncodedKey $crypt "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F" "hex"
CkCrypt2_SetEncodedIV $crypt "000102030405060708090A0B0C0D0E0F" "hex"
set fileToDecrypt "c:/temp/qa_output/hamlet.enc"
set facIn [new_CkFileAccess]
set success [CkFileAccess_OpenForRead $facIn $fileToDecrypt]
if {$success != 1} then {
puts "Failed to open file to be decrytped."
delete_CkCrypt2 $crypt
delete_CkFileAccess $facIn
exit
}
# Let's decrypt in 32000 byte chunks.
set chunkSize 32000
set numChunks [CkFileAccess_GetNumBlocks $facIn $chunkSize]
CkCrypt2_put_FirstChunk $crypt 1
CkCrypt2_put_LastChunk $crypt 0
set bd [new_CkBinData]
set bdDecrypted [new_CkBinData]
set i 0
while {$i < $numChunks} {
set i [expr $i + 1]
if {$i == $numChunks} then {
CkCrypt2_put_LastChunk $crypt 1
}
# Read the next chunk from the file.
# The last chunk will be whatever amount remains in the file..
CkBinData_Clear $bd
CkFileAccess_FileReadBd $facIn $chunkSize $bd
# Decrypt this chunk.
CkCrypt2_DecryptBd $crypt $bd
# Accumulate the decrypted chunks.
CkBinData_AppendBd $bdDecrypted $bd
CkCrypt2_put_FirstChunk $crypt 0
}
# Make sure both FirstChunk and LastChunk are restored to 1 after
# encrypting or decrypting in chunks. Otherwise subsequent encryptions/decryptions
# will produce unexpected results.
CkCrypt2_put_FirstChunk $crypt 1
CkCrypt2_put_LastChunk $crypt 1
CkFileAccess_FileClose $facIn
# 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.
CkBinData_WriteFile $bdDecrypted "c:/temp/qa_output/hamlet_decrypted.xml"
delete_CkCrypt2 $crypt
delete_CkFileAccess $facIn
delete_CkBinData $bd
delete_CkBinData $bdDecrypted