DataFlex
DataFlex
Encrypt File in Chunks using AES CBC
See more Encryption Examples
Demonstrates how to use the FirstChunk/LastChunk properties to encrypt a file chunk-by-chunk.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoCrypt
String sFileToEncrypt
Handle hoFacIn
String sOutputEncryptedFile
Handle hoFacOutEnc
Integer iChunkSize
Integer iNumChunks
Variant vBd
Handle hoBd
Integer i
String sDecryptedFile
Boolean iBSame
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
If (Not(IsComObjectCreated(hoCrypt))) Begin
Send CreateComObject of hoCrypt
End
Set ComCryptAlgorithm Of hoCrypt To "aes"
Set ComCipherMode Of hoCrypt To "cbc"
Set ComKeyLength Of hoCrypt To 256
Send ComSetEncodedKey To hoCrypt "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F" "hex"
Send ComSetEncodedIV To hoCrypt "000102030405060708090A0B0C0D0E0F" "hex"
Move "qa_data/hamlet.xml" To sFileToEncrypt
Get Create (RefClass(cComCkFileAccess)) To hoFacIn
If (Not(IsComObjectCreated(hoFacIn))) Begin
Send CreateComObject of hoFacIn
End
Get ComOpenForRead Of hoFacIn sFileToEncrypt To iSuccess
If (iSuccess <> True) Begin
Showln "Failed to open file that is to be encrytped."
Procedure_Return
End
Move "c:/temp/qa_output/hamlet.enc" To sOutputEncryptedFile
Get Create (RefClass(cComCkFileAccess)) To hoFacOutEnc
If (Not(IsComObjectCreated(hoFacOutEnc))) Begin
Send CreateComObject of hoFacOutEnc
End
Get ComOpenForWrite Of hoFacOutEnc sOutputEncryptedFile To iSuccess
If (iSuccess <> True) Begin
Showln "Failed to encrypted output file."
Procedure_Return
End
// Let's encrypt in 10000 byte chunks.
Move 10000 To iChunkSize
Get ComGetNumBlocks Of hoFacIn iChunkSize To iNumChunks
Set ComFirstChunk Of hoCrypt To True
Set ComLastChunk Of hoCrypt To False
Get Create (RefClass(cComChilkatBinData)) To hoBd
If (Not(IsComObjectCreated(hoBd))) Begin
Send CreateComObject of hoBd
End
Move 0 To i
While (i < iNumChunks)
Move (i + 1) To i
If (i = iNumChunks) Begin
Set ComLastChunk Of hoCrypt To True
End
// Read the next chunk from the file.
// The last chunk will be whatever amount remains in the file..
Get ComClear Of hoBd To iSuccess
Get pvComObject of hoBd to vBd
Get ComFileReadBd Of hoFacIn iChunkSize vBd To iSuccess
// Encrypt.
Get pvComObject of hoBd to vBd
Get ComEncryptBd Of hoCrypt vBd To iSuccess
// Write the encrypted chunk to the output file.
Get pvComObject of hoBd to vBd
Get ComFileWriteBd Of hoFacOutEnc vBd 0 0 To iSuccess
Set ComFirstChunk Of hoCrypt To False
Loop
// Make sure both FirstChunk and LastChunk are restored to True after
// encrypting or decrypting in chunks. Otherwise subsequent encryptions/decryptions
// will produce unexpected results.
Set ComFirstChunk Of hoCrypt To True
Set ComLastChunk Of hoCrypt To True
Send ComFileClose To hoFacIn
Send ComFileClose To hoFacOutEnc
// Decrypt the encrypted output file in a single call using CBC mode:
Move "qa_output/hamlet_dec.xml" To sDecryptedFile
Get ComCkDecryptFile Of hoCrypt sOutputEncryptedFile sDecryptedFile To iSuccess
// Assume success for the example..
// Compare the contents of the decrypted file with the original file:
Get ComFileContentsEqual Of hoFacIn sFileToEncrypt sDecryptedFile To iBSame
Showln "bSame = " iBSame
End_Procedure