mail@pastecode.io avatar
7 months ago
2.8 kB
Decrypting AES-encrypted data involves using the AES key, initialization vector (IV), nonce, and authentication tag. Here's a basic example in Java using the Java Cryptography Architecture (JCA) library:

import javax.crypto.*;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class AESDecryptionExample {

    public static void main(String[] args) throws Exception {
        // Replace these values with your actual AES key, IV, nonce, and tag
        byte[] aesKey = hexStringToByteArray("yourAESKeyInHex");
        byte[] iv = hexStringToByteArray("yourIVInHex");
        byte[] nonce = hexStringToByteArray("yourNonceInHex");
        byte[] tag = hexStringToByteArray("yourTagInHex");

        // Replace this ciphertext with your actual encrypted data
        byte[] ciphertext = hexStringToByteArray("yourEncryptedDataInHex");

        // Decrypt the data
        byte[] decryptedData = decryptAESGCM(ciphertext, aesKey, iv, nonce, tag);

        // Print the decrypted data
        System.out.println("Decrypted Data: " + new String(decryptedData, "UTF-8"));

    private static byte[] decryptAESGCM(byte[] ciphertext, byte[] aesKey, byte[] iv, byte[] nonce, byte[] tag)
            throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
            InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");

        // Create the GCMParameterSpec using IV, nonce, and tag
        GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(tag.length * 8, nonce);

        // Initialize the cipher with the key, mode, and parameters
        SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES");
        cipher.init(Cipher.DECRYPT_MODE, keySpec, gcmParameterSpec);

        // Decrypt the ciphertext
        return cipher.doFinal(ciphertext);

    private static byte[] hexStringToByteArray(String hex) {
        int len = hex.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
                    + Character.digit(hex.charAt(i + 1), 16));
        return data;

Make sure to replace "yourAESKeyInHex," "yourIVInHex," "yourNonceInHex," "yourTagInHex," and "yourEncryptedDataInHex" with your actual AES key, IV, nonce, tag, and encrypted data in hexadecimal form.

Note: This example assumes you are using AES in GCM (Galois/Counter Mode) mode for authenticated encryption. Adjust the algorithm and mode accordingly based on your encryption setup. Also, handle exceptions and errors appropriately in a production environment.
Leave a Comment