Zig
Zig
Streaming Encryption by Encrypting in Chunks
See more Encryption Examples
Encrypt data in chunks.Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
const crypt = try chilkat.Crypt2.init();
defer crypt.deinit();
crypt.setCryptAlgorithm("aes");
crypt.setCipherMode("cbc");
crypt.setKeyLength(128);
crypt.setEncodedKey("000102030405060708090A0B0C0D0E0F", "hex");
crypt.setEncodedIV("000102030405060708090A0B0C0D0E0F", "hex");
crypt.setEncodingMode("hex");
const txt1 = "The quick brown fox jumped over the lazy dog.\r\n";
const txt2 = "-\r\n";
const txt3 = "Done.\r\n";
const sb_encrypted = try chilkat.StringBuilder.init();
defer sb_encrypted.deinit();
// 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);
sb_encrypted.append(try crypt.encryptStringENC(alloc, txt1)) catch {};
// Encrypt the 2nd chunk
crypt.setFirstChunk(false);
crypt.setLastChunk(false);
sb_encrypted.append(try crypt.encryptStringENC(alloc, txt2)) catch {};
// 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: i32 = 0;
i = 0;
while (i <= 4) : (i += 1) {
sb_encrypted.append(try crypt.encryptStringENC(alloc, txt1)) catch {};
sb_encrypted.append(try crypt.encryptStringENC(alloc, txt2)) catch {};
}
// Now encrypt the last chunk:
crypt.setFirstChunk(false);
crypt.setLastChunk(true);
sb_encrypted.append(try crypt.encryptStringENC(alloc, txt3)) catch {};
std.debug.print("{s}\n", .{try sb_encrypted.getAsString(alloc)});
// Now decrypt in one call.
// (The data we're decrypting is both the first AND last chunk.)
crypt.setFirstChunk(true);
crypt.setLastChunk(true);
const decrypted_text = try crypt.decryptStringENC(alloc, try sb_encrypted.getAsString(alloc));
std.debug.print("{s}\n", .{decrypted_text});
// Note: You may decrypt in N chunks by setting the FirstChunk
// and LastChunk properties prior to calling the Decrypt* methods.
}