Sample code for 30+ languages & platforms
Rust

Decrypt 256-bit AES GCM Produced by Something Unknown

See more Encryption Examples

Demonstrates how to decrypt something produced elsewhere (unknown) with 256-bit AES GCM.

Chilkat Rust Downloads

Rust

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

// We have the following to decrypt:

// Key (Base64): 
let key_base64 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".to_string();

// IV (Base64Url):
let iv_base64_url = "xrvaINMLqotAbWRK".to_string();

// ciphertext (base64url):
let cipher_base64_url = "RtGNAS-zQOxSB8W0HfqJjCoyt9KgImW_l-HjVC40hOOl-RNfRF3hzDIT1kvFVF8i_KX9XmqAftb6lyq-jLCEc_MSgqt3q1ixv3Ez4SbS3G5e3qGzLwxIMi2sCt00aDNwK2ipsJ4aw8s7ePPnl4oY-y1st9rwCWR0rrgEZwS9jmS4uJWGPn9K3jbKRnMslznDbtFLNJctMVXBTP-cv47JelxLCBOQSlK29rMuEFrhHR_VQrPq6gtZaBVSXZSYT0XOklp7nu9mVhrMCRtBCC5oiu5MPE5JYx4ANo3hUY7_NyQl2bpn9GfRXrdvqRGE-gy2upj-cDkm0t_tV8xmYge9DBQTH3B_4BGl2qTk_o-m7pEmKkS8XSdQhGcuFlykqrkE8SzB5I8esfzWOM0pwxbz0H_VaylKYHY=".to_string();

let crypt = chilkat::Crypt2::new();

crypt.set_crypt_algorithm("aes");
crypt.set_cipher_mode("gcm");
crypt.set_key_length(256);

let _ = crypt.set_encoded_aad("random", "ascii").is_ok();
crypt.set_encoded_key(&key_base64, "base64");
crypt.set_encoded_iv(&iv_base64_url, "base64url");

// The cipher text contains the 16-byte auth tag at the end.
// get it separately..
let bd_encrypted = chilkat::BinData::new();
let bd_auth_tag = chilkat::BinData::new();
let _ = bd_encrypted.append_encoded(&cipher_base64_url, "base64url").is_ok();

let num_bytes = bd_encrypted.num_bytes();
let auth_tag_hex = bd_encrypted.get_encoded_chunk(num_bytes - 16, 16, "hex").unwrap_or_default();

println!("Auth tag in hex: {}", auth_tag_hex);

let _ = bd_auth_tag.append_encoded(&auth_tag_hex, "hex").is_ok();
let _ = bd_encrypted.remove_chunk(num_bytes - 16, 16);

// Use this special value to tell Chilkat to ignore the auth tag.
let _ = crypt.set_encoded_auth_tag("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "hex").is_ok();

// Decrypt
crypt.set_encoding_mode("base64");
let original_text = crypt.decrypt_string_enc(&bd_encrypted.get_encoded("base64").unwrap_or_default()).unwrap_or_default();
if !crypt.last_method_success() {
    println!("{}", crypt.last_error_text());
} else {
    println!("{}", original_text);
    println!("Success.");
}

// Decrypted text