Sample code for 30+ languages & platforms
Go

Decrypt File in Chunks using 256-bit AES

See more Encryption Examples

Shows how to decrypt a file chunk-by-chunk using FirstChunk/LastChunk properties and accumulate the results in memory with a Chilkat BinData object.

Chilkat Go Downloads

Go
    success := false

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // This example decrypts the file previously encrypted in this example:
    // Encrypt File in Chunks using AES CBC

    crypt := chilkat.NewCrypt2()

    crypt.SetCryptAlgorithm("aes")
    crypt.SetCipherMode("cbc")
    crypt.SetKeyLength(256)

    crypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F","hex")
    crypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")

    fileToDecrypt := "c:/temp/qa_output/hamlet.enc"
    facIn := chilkat.NewFileAccess()
    success = facIn.OpenForRead(fileToDecrypt)
    if success != true {
        fmt.Println("Failed to open file to be decrytped.")
        crypt.DisposeCrypt2()
        facIn.DisposeFileAccess()
        return
    }

    // Let's decrypt in 32000 byte chunks.
    chunkSize := 32000
    numChunks := facIn.GetNumBlocks(chunkSize)

    crypt.SetFirstChunk(true)
    crypt.SetLastChunk(false)

    bd := chilkat.NewBinData()
    bdDecrypted := chilkat.NewBinData()

    i := 0
    for i < numChunks {
        i = i + 1
        if i == numChunks {
            crypt.SetLastChunk(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)

        // Decrypt this chunk.
        crypt.DecryptBd(bd)
        // Accumulate the decrypted chunks.
        bdDecrypted.AppendBd(bd)

        crypt.SetFirstChunk(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.SetFirstChunk(true)
    crypt.SetLastChunk(true)

    facIn.FileClose()

    // The fully decrypted file is contained in bdDecrypted.
    // You can save to a file if desired, or use the decrypted data in your application directly from bdDecrypted.
    bdDecrypted.WriteFile("c:/temp/qa_output/hamlet_decrypted.xml")

    crypt.DisposeCrypt2()
    facIn.DisposeFileAccess()
    bd.DisposeBinData()
    bdDecrypted.DisposeBinData()