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
(Ruby) Streaming EncryptionEncrypt and decrypt using a stream.
require 'chilkat' # This example assumes the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. crypt = Chilkat::CkCrypt2.new() # Setup encryption using the chacha20 algorithm... crypt.put_CryptAlgorithm("chacha20") crypt.put_KeyLength(256) crypt.put_EncodingMode("hex") ivHex = "000000000000000000000002" crypt.SetEncodedIV(ivHex,"hex") crypt.put_InitialCount(42) keyHex = "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0" crypt.SetEncodedKey(keyHex,"hex") plainText = "The quick brown fox jumped over the lazy dog.\r\n" stream = Chilkat::CkStream.new() # We'll save the encrypted output in eStrings to demonstrate streaming decryption next. eStrings = Chilkat::CkStringArray.new() # Start a background task that will encrypt a stream. # task is a CkTask task = crypt.EncryptStreamAsync(stream) success = task.Run() # Write plainText to the stream, and read chacha20 encrypted text.. for i in 1 .. 10 # Note: An encryption algorithm's block size will cause buffering, # and therefore not every loop iteration will produce output. success = stream.WriteString(plainText) if (stream.get_DataAvailable() == true) cipherText = stream.readBytesENC("hex") print cipherText + "\n"; success = eStrings.Append(cipherText) end end # Tell the background task that the stream has ended. success = stream.WriteClose() # Let's make sure the background task finished. # It should already be the case that the task is finished. while (task.get_Finished() != true) task.SleepMs(20) end # Get any remaining data available from the stream. if (stream.get_DataAvailable() == true) cipherText = stream.readBytesENC("hex") print cipherText + "\n"; success = eStrings.Append(cipherText) end if (task.get_TaskSuccess() != true) print "async encryption failed:" + "\n"; print task.resultErrorText() + "\n"; success = false end print "-- encrypt finished --" + "\n"; # Now decrypt to return the original. # Reset the stream object so it can be used again. stream.Reset() # Start a background task that will decrypt a stream. # task is a CkTask task = crypt.DecryptStreamAsync(stream) success = task.Run() n = eStrings.get_Count() for i in 0 .. n - 1 success = stream.WriteBytesENC(eStrings.getString(i),"hex") if (stream.get_DataAvailable() == true) plainText = stream.readString() print plainText + "\n"; end end # Tell the background task that the stream has ended. success = stream.WriteClose() # Let's make sure the background task finished. # It should already be the case that the task is finished. while (task.get_Finished() != true) task.SleepMs(20) end # Get any remaining data available from the stream. if (stream.get_DataAvailable() == true) plainText = stream.readString() print plainText + "\n"; end if (task.get_TaskSuccess() != true) print "async decryption failed:" + "\n"; print task.resultErrorText() + "\n"; success = false end print "-- decrypt finished --" + "\n"; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.