Tcl
Tcl
Streaming Encryption by Encrypting in Chunks
See more Encryption Examples
Encrypt data in chunks.Chilkat Tcl Downloads
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