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
(PHP ActiveX) Streaming EncryptionEncrypt and decrypt using a stream.
<?php // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.Crypt2') $crypt = new COM("Chilkat.Crypt2"); // Setup encryption using the chacha20 algorithm... $crypt->CryptAlgorithm = 'chacha20'; $crypt->KeyLength = 256; $crypt->EncodingMode = 'hex'; $ivHex = '000000000000000000000002'; $crypt->SetEncodedIV($ivHex,'hex'); $crypt->InitialCount = 42; $keyHex = '1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0'; $crypt->SetEncodedKey($keyHex,'hex'); $plainText = 'The quick brown fox jumped over the lazy dog.\r\n'; // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.Stream') $stream = new COM("Chilkat.Stream"); // We'll save the encrypted output in eStrings to demonstrate streaming decryption next. // For versions of Chilkat < 10.0.0, use new COM('Chilkat_9_5_0.Chilkat.StringArray') $eStrings = new COM("Chilkat.StringArray"); // Start a background task that will encrypt a stream. // task is a Chilkat.Task $task = $crypt->EncryptStreamAsync($stream); $success = $task->Run(); // Write plainText to the stream, and read chacha20 encrypted text.. for ($i = 1; $i <= 10; $i++) { // 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->DataAvailable == 1) { $cipherText = $stream->readBytesENC('hex'); print $cipherText . "\n"; $success = $eStrings->Append($cipherText); } } // 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->Finished != 1)) { $task->SleepMs(20); } // Get any remaining data available from the stream. if ($stream->DataAvailable == 1) { $cipherText = $stream->readBytesENC('hex'); print $cipherText . "\n"; $success = $eStrings->Append($cipherText); } if ($task->TaskSuccess != 1) { print 'async encryption failed:' . "\n"; print $task->ResultErrorText . "\n"; $success = 0; } 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 Chilkat.Task $task = $crypt->DecryptStreamAsync($stream); $success = $task->Run(); $n = $eStrings->Count; for ($i = 0; $i <= $n - 1; $i++) { $success = $stream->WriteBytesENC($eStrings->getString($i),'hex'); if ($stream->DataAvailable == 1) { $plainText = $stream->readString(); print $plainText . "\n"; } } // 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->Finished != 1)) { $task->SleepMs(20); } // Get any remaining data available from the stream. if ($stream->DataAvailable == 1) { $plainText = $stream->readString(); print $plainText . "\n"; } if ($task->TaskSuccess != 1) { print 'async decryption failed:' . "\n"; print $task->ResultErrorText . "\n"; $success = 0; } print '-- decrypt finished --' . "\n"; ?> |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.