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
(Objective-C) Streaming EncryptionEncrypt and decrypt using a stream.
#import <CkoCrypt2.h> #import <NSString.h> #import <CkoStream.h> #import <CkoStringArray.h> #import <CkoTask.h> // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init]; // Setup encryption using the chacha20 algorithm... crypt.CryptAlgorithm = @"chacha20"; crypt.KeyLength = [NSNumber numberWithInt:256]; crypt.EncodingMode = @"hex"; NSString *ivHex = @"000000000000000000000002"; [crypt SetEncodedIV: ivHex encoding: @"hex"]; crypt.InitialCount = [NSNumber numberWithInt:42]; NSString *keyHex = @"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0"; [crypt SetEncodedKey: keyHex encoding: @"hex"]; NSString *plainText = @"The quick brown fox jumped over the lazy dog.\r\n"; CkoStream *stream = [[CkoStream alloc] init]; // We'll save the encrypted output in eStrings to demonstrate streaming decryption next. CkoStringArray *eStrings = [[CkoStringArray alloc] init]; // Start a background task that will encrypt a stream. CkoTask *task = [crypt EncryptStreamAsync: stream]; BOOL success = [task Run]; // Write plainText to the stream, and read chacha20 encrypted text.. NSString *cipherText = 0; int i; 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 == YES) { cipherText = [stream ReadBytesENC: @"hex"]; NSLog(@"%@",cipherText); 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 != YES)) { [task SleepMs: [NSNumber numberWithInt: 20]]; } // Get any remaining data available from the stream. if (stream.DataAvailable == YES) { cipherText = [stream ReadBytesENC: @"hex"]; NSLog(@"%@",cipherText); success = [eStrings Append: cipherText]; } if (task.TaskSuccess != YES) { NSLog(@"%@",@"async encryption failed:"); NSLog(@"%@",task.ResultErrorText); success = NO; } NSLog(@"%@",@"-- encrypt finished --"); // 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 = [crypt DecryptStreamAsync: stream]; success = [task Run]; int n = [eStrings.Count intValue]; for (i = 0; i <= n - 1; i++) { success = [stream WriteBytesENC: [eStrings GetString: [NSNumber numberWithInt: i]] encoding: @"hex"]; if (stream.DataAvailable == YES) { plainText = [stream ReadString]; NSLog(@"%@",plainText); } } // 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 != YES)) { [task SleepMs: [NSNumber numberWithInt: 20]]; } // Get any remaining data available from the stream. if (stream.DataAvailable == YES) { plainText = [stream ReadString]; NSLog(@"%@",plainText); } if (task.TaskSuccess != YES) { NSLog(@"%@",@"async decryption failed:"); NSLog(@"%@",task.ResultErrorText); success = NO; } NSLog(@"%@",@"-- decrypt finished --"); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.