Go
Go
Streaming Encryption by Encrypting in Chunks
See more Encryption Examples
Encrypt data in chunks.Chilkat Go Downloads
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
crypt := chilkat.NewCrypt2()
crypt.SetCryptAlgorithm("aes")
crypt.SetCipherMode("cbc")
crypt.SetKeyLength(128)
crypt.SetEncodedKey("000102030405060708090A0B0C0D0E0F","hex")
crypt.SetEncodedIV("000102030405060708090A0B0C0D0E0F","hex")
crypt.SetEncodingMode("hex")
txt1 := "The quick brown fox jumped over the lazy dog.\r\n"
txt2 := "-\r\n"
txt3 := "Done.\r\n"
sbEncrypted := chilkat.NewStringBuilder()
// Encrypt the 1st chunk:
// (don't worry about feeding the data to the encryptor in
// exact multiples of the encryption algorithm's block size.
// Chilkat will buffer the data.)
crypt.SetFirstChunk(true)
crypt.SetLastChunk(false)
sbEncrypted.Append(*crypt.EncryptStringENC(txt1))
// Encrypt the 2nd chunk
crypt.SetFirstChunk(false)
crypt.SetLastChunk(false)
sbEncrypted.Append(*crypt.EncryptStringENC(txt2))
// Now encrypt N more chunks...
// Remember -- we're doing this in CBC mode, so each call
// to the encrypt method depends on the state from previous
// calls...
crypt.SetFirstChunk(false)
crypt.SetLastChunk(false)
var i int
for i = 0; i <= 4; i++ {
sbEncrypted.Append(*crypt.EncryptStringENC(txt1))
sbEncrypted.Append(*crypt.EncryptStringENC(txt2))
}
// Now encrypt the last chunk:
crypt.SetFirstChunk(false)
crypt.SetLastChunk(true)
sbEncrypted.Append(*crypt.EncryptStringENC(txt3))
fmt.Println(*sbEncrypted.GetAsString())
// Now decrypt in one call.
// (The data we're decrypting is both the first AND last chunk.)
crypt.SetFirstChunk(true)
crypt.SetLastChunk(true)
decryptedText := crypt.DecryptStringENC(*sbEncrypted.GetAsString())
fmt.Println(*decryptedText)
// Note: You may decrypt in N chunks by setting the FirstChunk
// and LastChunk properties prior to calling the Decrypt* methods
crypt.DisposeCrypt2()
sbEncrypted.DisposeStringBuilder()