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
(PHP Extension) Streaming Compression --> Streaming EncryptionDemonstrate how to feed a compression stream into an encryption stream. This example does the following: Data File --> Compress --> Encrypt --> Application Reads
<?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 requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Initialize the compression object. $compress = new CkCompression(); $compress->put_Algorithm('deflate'); // Initialize the encryption object. $crypt = new CkCrypt2(); $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'); // Setup the streams. // streamC is for compression $streamC = new CkStream(); // streamE is for encryption $streamE = new CkStream(); // The source for the compressor is a file. $streamC->put_SourceFile('qa_data/hamlet.xml'); // The source for the encryptor is the output of the compressor stream. $success = $streamE->SetSourceStream($streamC); // Our application will be reading the output of streamE. // Start the compression and encryption streams in background threads.. // taskC is a CkTask $taskC = $compress->CompressStreamAsync($streamC); // taskE is a CkTask $taskE = $crypt->EncryptStreamAsync($streamE); $success = $taskC->Run(); $success = $taskE->Run(); // Read the compressed and encrypted bytes. $outData = new CkBinData(); while (($streamE->get_EndOfStream() != true)) { if ($streamE->get_DataAvailable() == true) { $success = $streamE->ReadBd($outData); } } // Let's make sure the background task finished. // It should already be the case that the task is finished. while ((($taskE->get_Finished() != true) or ($taskC->get_Finished() != true))) { $taskE->SleepMs(20); } // Get any remaining data that needs to be flushed. if ($streamE->get_DataAvailable() == true) { $success = $streamE->ReadBd($outData); } // Double-check for success.. if ($taskE->get_TaskSuccess() != true) { print 'async encryption failed:' . "\n"; print $taskE->resultErrorText() . "\n"; $success = false; } // Double-check for success.. if ($taskC->get_TaskSuccess() != true) { print 'async compression failed:' . "\n"; print $taskC->resultErrorText() . "\n"; $success = false; } // Save the compressed/encrypted data to a file. $outData->WriteFile('qa_output/compressedEncrypted.dat'); print 'The async compress/encrypt was successful.' . "\n"; // Let's decrypt and decompress to further verify... $success = $crypt->DecryptBd($outData); $success = $compress->DecompressBd($outData); // outData should contain the original data.. $success = $outData->WriteFile('qa_output/original_hamlet.xml'); ?> |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.