DevKits

AES Encryption & Decryption Online — 128 / 192 / 256, GCM & CBC

Encrypt and decrypt text with AES (128 / 192 / 256, GCM authenticated or CBC legacy) using a password. PBKDF2 key derivation with 200,000 iterations. 100% local — the Web Crypto API runs entirely in your browser.

Last updated:

Comments

Encryption and decryption run entirely in your browser using the native Web Crypto API. Your password, plaintext, and ciphertext never leave this tab. You can verify with your browser's DevTools Network panel — no request is made when you click Run.

Frequently Asked Questions

Is my password or plaintext uploaded anywhere?

No. The entire encryption/decryption runs in your browser via the Web Crypto API (SubtleCrypto). You can verify with your browser's DevTools Network panel — nothing is sent to any server. That's what makes it safe to use with real passphrases and real data.

Should I pick AES-GCM or AES-CBC?

AES-GCM is the modern default — it's an authenticated cipher, meaning decryption also verifies the ciphertext wasn't tampered with, and fails loudly if it was. Use AES-CBC only when you need to inter-operate with legacy systems that don't support GCM. Never use CBC without a separate MAC in production systems.

How is my password turned into an AES key?

Through PBKDF2 with SHA-256 and 200,000 iterations, salted with 16 random bytes per encryption. The salt is included in the ciphertext header, so decryption doesn't need it stored separately. 200k iterations balances speed with brute-force resistance for typical passwords.

Can this tool decrypt ciphertext from openssl / CryptoJS?

No. This tool produces a self-describing format (magic prefix + mode + key size + iteration count + salt + IV + ciphertext, all base64-encoded) so it can decrypt its own output without asking for parameters. It does not follow openssl's format or CryptoJS's format. If you need cross-tool interop, encrypt with the target system and paste it there.

Is AES enough on its own for a production system?

No — it's a primitive, not a protocol. Real systems combine AES with a proper key management story (KMS / HSM), authenticated framing (AES-GCM alone doesn't defend against replay), and often authenticated encryption libraries like libsodium's secretbox. Use this tool for ad-hoc encryption, learning, or verifying your production ciphertext round-trips correctly.

Related Tools

JWT Decoder

Decode JSON Web Tokens (JWT) to inspect the header, payload, and signature. Runs entirely in your browser — tokens are never sent to any server.

RSA Key Generator

Generate RSA key pairs (2048, 3072, or 4096 bits) online for OAEP encryption, PSS signing, or RS256 JWTs. Exports PKCS#8 private key + SPKI public key as PEM, JWK, or DER (hex/base64). 100% local — the Web Crypto API runs in your browser, private keys never leave the tab.

Public Key Extractor

Paste an RSA or EC private key (PEM PKCS#8 or JWK) and instantly extract the matching public key in PEM (SPKI), JWK, or DER format. Perfect for publishing a JWKS endpoint, verifying a token against a private-key-only backup, or distributing a public key to peers. 100% local — the private key never leaves your browser.

RSA Encrypt / Decrypt

Encrypt text with an RSA public key or decrypt ciphertext with the private key, using RSA-OAEP (SHA-256/384/512). Accepts PEM (PKCS#8 / SPKI) or JWK. 100% local — keys and plaintext never leave your browser tab.

ECDSA Sign / Verify

Sign or verify messages with ECDSA (P-256, P-384, P-521) using PEM or JWK keys. Outputs both JOSE / P1363 (JWT-compatible) and DER (OpenSSL-compatible) signatures. 100% local via the Web Crypto API.

ECDSA Key Generator

Generate elliptic-curve key pairs (P-256, P-384, P-521) for ECDSA signatures or ECDH key agreement. Exports PKCS#8 / SPKI PEM, JWK, and DER (hex/base64). Perfect for ES256/ES384/ES512 JWTs. 100% local via the Web Crypto API — the private key never leaves your browser.