PowerShell
PowerShell
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 PowerShell Downloads
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"
$success = $false
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
$crypt = New-Object Chilkat.Crypt2
$crypt.CryptAlgorithm = "aes"
$crypt.CipherMode = "cbc"
$crypt.KeyLength = 256
$crypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F","hex")
$crypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
$fileToEncrypt = "qa_data/hamlet.xml"
$facIn = New-Object Chilkat.FileAccess
$success = $facIn.OpenForRead($fileToEncrypt)
if ($success -ne $true) {
$("Failed to open file that is to be encrytped.")
exit
}
$outputEncryptedFile = "c:/temp/qa_output/hamlet.enc"
$facOutEnc = New-Object Chilkat.FileAccess
$success = $facOutEnc.OpenForWrite($outputEncryptedFile)
if ($success -ne $true) {
$("Failed to encrypted output file.")
exit
}
# Let's encrypt in 10000 byte chunks.
$chunkSize = 10000
$numChunks = $facIn.GetNumBlocks($chunkSize)
$crypt.FirstChunk = $true
$crypt.LastChunk = $false
$bd = New-Object Chilkat.BinData
$i = 0
while ($i -lt $numChunks) {
$i = $i + 1
if ($i -eq $numChunks) {
$crypt.LastChunk = $true
}
# Read the next chunk from the file.
# The last chunk will be whatever amount remains in the file..
$bd.Clear()
$facIn.FileReadBd($chunkSize,$bd)
# Encrypt.
$crypt.EncryptBd($bd)
# Write the encrypted chunk to the output file.
$facOutEnc.FileWriteBd($bd,0,0)
$crypt.FirstChunk = $false
}
# Make sure both FirstChunk and LastChunk are restored to $true after
# encrypting or decrypting in chunks. Otherwise subsequent encryptions/decryptions
# will produce unexpected results.
$crypt.FirstChunk = $true
$crypt.LastChunk = $true
$facIn.FileClose()
$facOutEnc.FileClose()
# Decrypt the encrypted output file in a single call using CBC mode:
$decryptedFile = "qa_output/hamlet_dec.xml"
$success = $crypt.CkDecryptFile($outputEncryptedFile,$decryptedFile)
# Assume success for the example..
# Compare the contents of the decrypted file with the original file:
$bSame = $facIn.FileContentsEqual($fileToEncrypt,$decryptedFile)
$("bSame = " + $bSame)