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 Extension) Streaming EncryptionEncrypt and decrypt using a stream.
<?php // The version number (9_5_0) should match version of the Chilkat extension used, omitting the micro-version number. // For example, if using Chilkat v9.5.0.48, then include as shown here: include("chilkat_9_5_0.php"); // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. $crypt = new CkCrypt2(); // 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 = new CkStream(); // We'll save the encrypted output in eStrings to demonstrate streaming decryption next. $eStrings = new CkStringArray(); // 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 = 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->get_DataAvailable() == true) { $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->get_Finished() != true)) { $task->SleepMs(20); } // Get any remaining data available from the stream. if ($stream->get_DataAvailable() == true) { $cipherText = $stream->readBytesENC('hex'); print $cipherText . "\n"; $success = $eStrings->Append($cipherText); } if ($task->get_TaskSuccess() != true) { print 'async encryption failed:' . "\n"; print $task->resultErrorText() . "\n"; $success = false; } 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 = 0; $i <= $n - 1; $i++) { $success = $stream->WriteBytesENC($eStrings->getString($i),'hex'); if ($stream->get_DataAvailable() == true) { $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->get_Finished() != true)) { $task->SleepMs(20); } // Get any remaining data available from the stream. if ($stream->get_DataAvailable() == true) { $plainText = $stream->readString(); print $plainText . "\n"; } if ($task->get_TaskSuccess() != true) { print 'async decryption failed:' . "\n"; print $task->resultErrorText() . "\n"; $success = false; } print '-- decrypt finished --' . "\n"; ?> |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.