Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.0.0+

Encrypt with Chilkat, Decrypt with OpenSSL

See more OpenSSL Examples

Demonstrates how to RSA encrypt a string using Chilkat, and then shows the corresponding OpenSSL command to RSA decrypt. The OpenSSL command to decrypt is as follows:
openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

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

    const rsa = try chilkat.Rsa.init();
    defer rsa.deinit();

    // Note: RSA encryption uses the public key.
    // RSA decryption uses the private key.
    // The reason is that the public key can be freely provided to anybody.  This allows anybody
    // to send an encrypted message to the private key owner, and only the private key owner
    // can decrypt.
    const key = try chilkat.PublicKey.init();
    defer key.deinit();

    // Load an RSA public key from a PEM file:
    success = if (key.loadFromFile("qa_data/pem/VP_Public.pem")) true else |_| false;
    if (!success) {
        std.debug.print("{s}\n", .{try key.getLastErrorText(alloc)});
        return;
    }

    // Load the public key into the RSA object.
    success = if (rsa.usePublicKey(key)) true else |_| false;
    if (!success) {
        std.debug.print("{s}\n", .{try rsa.getLastErrorText(alloc)});
        return;
    }

    // The LittleEndian property is false by default, but it is set here
    // anyway to show that LittleEndian byte ordering is required for OpenSSL compatibility.
    rsa.setLittleEndian(false);

ERROR: Method not in the Zig package: Rsa.EncryptString
ERROR: Method not in the Zig package: Rsa.EncryptString
    encrypted_bytes = rsa.ERROR();
    if (!rsa.getLastMethodSuccess()) {
        std.debug.print("{s}\n", .{try rsa.getLastErrorText(alloc)});
        return;
    }

    // The OpenSSL command to decrypt would be this:
    // openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

    const fac = try chilkat.FileAccess.init();
    defer fac.deinit();
ERROR: Method not in the Zig package: FileAccess.WriteEntireFile
ERROR: Method not in the Zig package: FileAccess.WriteEntireFile
    success = fac.ERROR();
    if (!success) {
        std.debug.print("{s}\n", .{try fac.getLastErrorText(alloc)});
        return;
    }

    std.debug.print("RSA Encryption Succeeded.\n", .{});
}