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
(PureBasic) Encrypt File in Chunks using AES CBCDemonstrates how to use the FirstChunk/LastChunk properties to encrypt a file chunk-by-chunk.
IncludeFile "CkBinData.pb" IncludeFile "CkFileAccess.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkCrypt2::setCkCryptAlgorithm(crypt, "aes") CkCrypt2::setCkCipherMode(crypt, "cbc") CkCrypt2::setCkKeyLength(crypt, 128) CkCrypt2::ckSetEncodedKey(crypt,"000102030405060708090A0B0C0D0E0F","hex") CkCrypt2::ckSetEncodedIV(crypt,"000102030405060708090A0B0C0D0E0F","hex") fileToEncrypt.s = "qa_data/hamlet.xml" facIn.i = CkFileAccess::ckCreate() If facIn.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkFileAccess::ckOpenForRead(facIn,fileToEncrypt) If success <> 1 Debug "Failed to open file that is to be encrytped." CkCrypt2::ckDispose(crypt) CkFileAccess::ckDispose(facIn) ProcedureReturn EndIf outputEncryptedFile.s = "qa_output/hamlet.enc" facOutEnc.i = CkFileAccess::ckCreate() If facOutEnc.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkFileAccess::ckOpenForWrite(facOutEnc,outputEncryptedFile) If success <> 1 Debug "Failed to encrypted output file." CkCrypt2::ckDispose(crypt) CkFileAccess::ckDispose(facIn) CkFileAccess::ckDispose(facOutEnc) ProcedureReturn EndIf ; Let's encrypt in 10000 byte chunks. chunkSize.i = 10000 numChunks.i = CkFileAccess::ckGetNumBlocks(facIn,chunkSize) CkCrypt2::setCkFirstChunk(crypt, 1) CkCrypt2::setCkLastChunk(crypt, 0) bd.i = CkBinData::ckCreate() If bd.i = 0 Debug "Failed to create object." ProcedureReturn EndIf i.i = 0 While i < numChunks i = i + 1 If i = numChunks CkCrypt2::setCkLastChunk(crypt, 1) EndIf ; Read the next chunk from the file. ; The last chunk will be whatever amount remains in the file.. CkBinData::ckClear(bd) CkFileAccess::ckFileReadBd(facIn,chunkSize,bd) ; Encrypt. CkCrypt2::ckEncryptBd(crypt,bd) ; Write the encrypted chunk to the output file. CkFileAccess::ckFileWriteBd(facOutEnc,bd,0,0) CkCrypt2::setCkFirstChunk(crypt, 0) Wend ; Make sure both FirstChunk and LastChunk are restored to 1 after ; encrypting or decrypting in chunks. Otherwise subsequent encryptions/decryptions ; will produce unexpected results. CkCrypt2::setCkFirstChunk(crypt, 1) CkCrypt2::setCkLastChunk(crypt, 1) CkFileAccess::ckFileClose(facIn) CkFileAccess::ckFileClose(facOutEnc) ; Decrypt the encrypted output file in a single call using CBC mode: decryptedFile.s = "qa_output/hamlet_dec.xml" success = CkCrypt2::ckCkDecryptFile(crypt,outputEncryptedFile,decryptedFile) ; Assume success for the example.. ; Compare the contents of the decrypted file with the original file: bSame.i = CkFileAccess::ckFileContentsEqual(facIn,fileToEncrypt,decryptedFile) Debug "bSame = " + Str(bSame) CkCrypt2::ckDispose(crypt) CkFileAccess::ckDispose(facIn) CkFileAccess::ckDispose(facOutEnc) CkBinData::ckDispose(bd) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.