AES Decryption Tool

Decrypt AES-encrypted ciphertext — supports Base64 and Hex input

Free Client-Side No Login No Storage
Loading tool...

How to Use the AES Decryption Tool

  1. Paste the AES ciphertext you want to decrypt.
  2. Select the key size (128, 192, or 256-bit) used during encryption.
  3. Choose the mode (CBC, ECB, CTR, OFB, or CFB) — must match encryption mode.
  4. Enter the secret key and IV used during encryption.
  5. Click Decrypt to recover the plaintext.

All decryption runs 100% in your browser using CryptoJS.

What is AES Decryption?

AES (Advanced Encryption Standard) decryption reverses the symmetric AES cipher to recover the original plaintext from ciphertext using a shared secret key. It supports 128, 192, and 256-bit key sizes and multiple cipher modes such as CBC, CTR, and GCM. Because AES is symmetric, the exact same key used during encryption is required for decryption.

Common Uses

  • Decrypting secure application configuration secrets and environment variables
  • Restoring client-side encrypted backups and user vaults
  • Testing cryptographic implementations during API and security development
  • Deciphering payload contents in automated end-to-end encrypted messaging systems

Frequently Asked Questions

Why does AES decryption fail or return gibberish?

Decryption failure usually happens if the secret key, initialization vector (IV), or cipher mode (CBC, GCM, etc.) does not match what was used for encryption. If PKCS7 padding fails, the cipher cannot reconstruct the plaintext.

What is an Initialization Vector (IV) and why is it needed?

An IV is an arbitrary number used along with a secret key to ensure that encrypting identical blocks of data yields unique ciphertext each time. In CBC mode, using the wrong IV will corrupt the first decrypted block.

Is client-side AES decryption secure?

Yes, Aya Corporation executes all cryptographic computations entirely in your browser using Web Cryptography and CryptoJS. Your secret keys and decrypted plaintext never touch an external server.

Notes from this implementation

Why this page is separate from encryption

Decryption is the same CryptoJS call in reverse, but the failure mode is different enough that a combined form hides it. AES.decrypt returns an empty word array when the padding does not check out. The page then shows a blank result. That blank can mean a wrong key, a wrong IV, a wrong mode, or ciphertext that was truncated when you copied it. It does not mean the plaintext was an empty string you encrypted on purpose.

The mode list matches the encryption page: CBC, ECB, CTR, OFB, CFB, PKCS7. Ciphertext is expected in the CryptoJS OpenSSL-compatible string form (the Salted__ prefix appears only when CryptoJS itself chose a salt; if you passed a raw key and IV, you will usually see a Base64 ciphertext without that prefix). Paste the whole string, including trailing = characters.

A mismatch to try on purpose

Encrypt ping in CBC, then decrypt it in ECB with the same key. You should not get ping back. If a tutorial tells you AES is “just a password box,” this is the counterexample: the mode is part of the key.