![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Encrypting a Data StreamThis example illustrates encrypting a large dataset using symmetric encryption algorithms like
You can provide data chunks smaller than the encryption algorithm's block size. For example, AES uses 16-byte blocks;
Chilkat handles the buffering of data as needed. If a data chunk smaller than the block size is provided, an empty string (or 0 bytes) is returned, and the data is buffered to be combined with subsequent chunks. The final chunk is padded to the algorithm's block size (as determined by the Chunk-wise decryption follows the same procedure as chunk-wise encryption.
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 |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.