What ciphertext format does this tool accept?
Base64 of the layout salt(16 bytes) || iv(12 bytes) || ciphertext-with-gcm-tag, exactly as produced by the OpenFormatter AES Encrypt tool. The salt is used to re-derive the AES-256 key with PBKDF2-HMAC-SHA256 (250,000 iterations); the IV and tag are consumed by AES-GCM. You only need the base64 string and the passphrase — nothing else to track.
Why does decryption fail with a valid-looking passphrase?
AES-GCM is authenticated: if the derived key is wrong by a single bit, or if any byte of the ciphertext or tag was modified in transit, the tag check fails and the browser refuses to return plaintext. The two common causes are (1) a typo in the passphrase, often a leading/trailing space picked up by copy-paste, and (2) an extra newline or character pasted into the ciphertext field. Re-paste both and try again.
Is my passphrase sent to a server?
No. Decryption runs entirely inside your browser through the Web Crypto SubtleCrypto API. The passphrase, derived key, and recovered plaintext exist only in this tab. Open DevTools → Network and click Decrypt — there are zero outbound requests.
Can I decrypt ciphertext produced by another library?
Only if it uses the exact same envelope: PBKDF2-HMAC-SHA256 with 250,000 iterations, AES-256-GCM, 16-byte random salt, 12-byte random IV, and the layout salt || iv || ciphertext+tag, base64-encoded. Different parameter choices (different iteration count, different hash, different IV/salt sizes, fields stored separately) will appear to be valid base64 but will fail the GCM authentication check.
Does this tool log my plaintext?
No. There is no telemetry, no analytics on input fields, and no server round-trip during decryption. The only network requests this page makes are the initial HTML, JS, CSS, and font assets — verifiable in DevTools.
What if the ciphertext was modified in transit?
AES-GCM detects it. The 128-bit authentication tag baked into the ciphertext is checked during decryption — if the bytes were altered, even by one bit, the SubtleCrypto decrypt call throws and you see an error. This is the entire point of authenticated encryption: integrity and confidentiality together.
How long can a ciphertext be?
AES-GCM permits up to ~64 GB per (key, IV) pair, so for any reasonable text payload there is no length limit. The browser may slow down rendering very large outputs in the textarea, but the cryptography is unbothered. For multi-gigabyte payloads, use a streaming API in code rather than this UI.
Why use PBKDF2 instead of just hashing the passphrase?
A single SHA-256 of the passphrase would let an attacker test billions of guesses per second on a GPU. PBKDF2 with 250,000 iterations forces ~250,000 SHA-256 operations per guess, slowing brute force by the same factor. The random salt makes precomputed rainbow tables useless. Modern alternatives like Argon2id are even better; PBKDF2 is used here because it is the only KDF natively available in the Web Crypto API.