Sample code for 30+ languages & platforms
Tcl

Streaming Encryption by Encrypting in Chunks

See more Encryption Examples

Encrypt data in chunks.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

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

set crypt [new_CkCrypt2]

CkCrypt2_put_CryptAlgorithm $crypt "aes"
CkCrypt2_put_CipherMode $crypt "cbc"
CkCrypt2_put_KeyLength $crypt 128

CkCrypt2_SetEncodedKey $crypt "000102030405060708090A0B0C0D0E0F" "hex"
CkCrypt2_SetEncodedIV $crypt "000102030405060708090A0B0C0D0E0F" "hex"

CkCrypt2_put_EncodingMode $crypt "hex"
set txt1 "The quick brown fox jumped over the lazy dog.\r\n"
set txt2 "-\r\n"
set txt3 "Done.\r\n"

set sbEncrypted [new_CkStringBuilder]

# Encrypt the 1st chunk:
# (don't worry about feeding the data to the encryptor in 
# exact multiples of the encryption algorithm's block size.
# Chilkat will buffer the data.)
CkCrypt2_put_FirstChunk $crypt 1
CkCrypt2_put_LastChunk $crypt 0
CkStringBuilder_Append $sbEncrypted [CkCrypt2_encryptStringENC $crypt $txt1]

# Encrypt the 2nd chunk
CkCrypt2_put_FirstChunk $crypt 0
CkCrypt2_put_LastChunk $crypt 0
CkStringBuilder_Append $sbEncrypted [CkCrypt2_encryptStringENC $crypt $txt2]

# Now encrypt N more chunks...
# Remember -- we're doing this in CBC mode, so each call
# to the encrypt method depends on the state from previous
# calls...
CkCrypt2_put_FirstChunk $crypt 0
CkCrypt2_put_LastChunk $crypt 0

for {set i 0} {$i <= 4} {incr i} {
    CkStringBuilder_Append $sbEncrypted [CkCrypt2_encryptStringENC $crypt $txt1]
    CkStringBuilder_Append $sbEncrypted [CkCrypt2_encryptStringENC $crypt $txt2]
}

# Now encrypt the last chunk:
CkCrypt2_put_FirstChunk $crypt 0
CkCrypt2_put_LastChunk $crypt 1
CkStringBuilder_Append $sbEncrypted [CkCrypt2_encryptStringENC $crypt $txt3]

puts [CkStringBuilder_getAsString $sbEncrypted]

# Now decrypt in one call.
# (The data we're decrypting is both the first AND last chunk.)  
CkCrypt2_put_FirstChunk $crypt 1
CkCrypt2_put_LastChunk $crypt 1
set decryptedText [CkCrypt2_decryptStringENC $crypt [CkStringBuilder_getAsString $sbEncrypted]]

puts "$decryptedText"

# Note: You may decrypt in N chunks by setting the FirstChunk
# and LastChunk properties prior to calling the Decrypt* methods

delete_CkCrypt2 $crypt
delete_CkStringBuilder $sbEncrypted