Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Streaming EncryptionEncrypt and decrypt using a stream.
Use ChilkatAx-win32.pkg Procedure Test Handle hoCrypt String sIvHex String sKeyHex String sPlainText Variant vStream Handle hoStream Handle hoEStrings Variant vTask Handle hoTask Boolean iSuccess String sCipherText Integer i Integer n String sTemp1 Boolean bTemp1 // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End // Setup encryption using the chacha20 algorithm... Set ComCryptAlgorithm Of hoCrypt To "chacha20" Set ComKeyLength Of hoCrypt To 256 Set ComEncodingMode Of hoCrypt To "hex" Move "000000000000000000000002" To sIvHex Send ComSetEncodedIV To hoCrypt sIvHex "hex" Set ComInitialCount Of hoCrypt To 42 Move "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0" To sKeyHex Send ComSetEncodedKey To hoCrypt sKeyHex "hex" Move "The quick brown fox jumped over the lazy dog." + (character(13)) + (character(10)) To sPlainText Get Create (RefClass(cComChilkatStream)) To hoStream If (Not(IsComObjectCreated(hoStream))) Begin Send CreateComObject of hoStream End // We'll save the encrypted output in eStrings to demonstrate streaming decryption next. Get Create (RefClass(cComCkStringArray)) To hoEStrings If (Not(IsComObjectCreated(hoEStrings))) Begin Send CreateComObject of hoEStrings End // Start a background task that will encrypt a stream. Get pvComObject of hoStream to vStream Get ComEncryptStreamAsync Of hoCrypt vStream To vTask If (IsComObject(vTask)) Begin Get Create (RefClass(cComChilkatTask)) To hoTask Set pvComObject Of hoTask To vTask End Get ComRun Of hoTask To iSuccess // Write plainText to the stream, and read chacha20 encrypted text.. For i From 1 To 10 // Note: An encryption algorithm's block size will cause buffering, // and therefore not every loop iteration will produce output. Get ComWriteString Of hoStream sPlainText To iSuccess Get ComDataAvailable Of hoStream To bTemp1 If (bTemp1 = True) Begin Get ComReadBytesENC Of hoStream "hex" To sCipherText Showln sCipherText Get ComAppend Of hoEStrings sCipherText To iSuccess End Loop // Tell the background task that the stream has ended. Get ComWriteClose Of hoStream To iSuccess // Let's make sure the background task finished. // It should already be the case that the task is finished. While ((ComFinished(hoTask)) <> True) Send ComSleepMs To hoTask 20 Loop // Get any remaining data available from the stream. Get ComDataAvailable Of hoStream To bTemp1 If (bTemp1 = True) Begin Get ComReadBytesENC Of hoStream "hex" To sCipherText Showln sCipherText Get ComAppend Of hoEStrings sCipherText To iSuccess End Get ComTaskSuccess Of hoTask To bTemp1 If (bTemp1 <> True) Begin Showln "async encryption failed:" Get ComResultErrorText Of hoTask To sTemp1 Showln sTemp1 Move False To iSuccess End Send Destroy of hoTask Showln "-- encrypt finished --" // Now decrypt to return the original. // Reset the stream object so it can be used again. Send ComReset To hoStream // Start a background task that will decrypt a stream. Get pvComObject of hoStream to vStream Get ComDecryptStreamAsync Of hoCrypt vStream To vTask If (IsComObject(vTask)) Begin Get Create (RefClass(cComChilkatTask)) To hoTask Set pvComObject Of hoTask To vTask End Get ComRun Of hoTask To iSuccess Get ComCount Of hoEStrings To n For i From 0 To (n - 1) Get ComGetString Of hoEStrings i To sTemp1 Get ComWriteBytesENC Of hoStream sTemp1 "hex" To iSuccess Get ComDataAvailable Of hoStream To bTemp1 If (bTemp1 = True) Begin Get ComReadString Of hoStream To sPlainText Showln sPlainText End Loop // Tell the background task that the stream has ended. Get ComWriteClose Of hoStream To iSuccess // Let's make sure the background task finished. // It should already be the case that the task is finished. While ((ComFinished(hoTask)) <> True) Send ComSleepMs To hoTask 20 Loop // Get any remaining data available from the stream. Get ComDataAvailable Of hoStream To bTemp1 If (bTemp1 = True) Begin Get ComReadString Of hoStream To sPlainText Showln sPlainText End Get ComTaskSuccess Of hoTask To bTemp1 If (bTemp1 <> True) Begin Showln "async decryption failed:" Get ComResultErrorText Of hoTask To sTemp1 Showln sTemp1 Move False To iSuccess End Send Destroy of hoTask Showln "-- decrypt finished --" End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.