What encryption does this tool use?
AES-256-GCM (Advanced Encryption Standard, 256-bit key, Galois/Counter Mode). The key is derived from your passphrase with PBKDF2-HMAC-SHA256 using 250,000 iterations and a fresh 16-byte random salt. A new 12-byte random IV is generated for every message. GCM provides authenticated encryption — any tampering with the ciphertext is detected at decryption time.
Is my passphrase sent to a server?
No. All encryption happens inside your browser through the Web Crypto SubtleCrypto API. The passphrase, plaintext, derived key, and ciphertext exist only in this tab. Open DevTools → Network and click Encrypt — you will see zero outbound requests.
What does the base64 output contain?
The output packs three things: the 16-byte salt (used for PBKDF2 on the receiving end), the 12-byte IV (required by AES-GCM), and the variable-length ciphertext including the GCM authentication tag. Layout is salt || iv || ciphertext, then base64 encoded. To decrypt you need only this one string and the passphrase — no separate IV or salt fields to track.
How strong is a 250,000-iteration PBKDF2?
OWASP currently recommends at least 600,000 iterations for PBKDF2-SHA256, but 250,000 is a reasonable browser default that finishes in well under a second on most devices while still costing an attacker meaningful compute per guess. The real defence against brute force is a long, high-entropy passphrase — 4+ random words from a wordlist, or a 16+ character random string. PBKDF2 buys you orders of magnitude, not infinity.
What happens if I forget the passphrase?
The ciphertext is unrecoverable. There is no backdoor, no recovery key, and no way for OpenFormatter to help — we never see the passphrase or the data. Store the passphrase in a password manager (1Password, Bitwarden, KeePass) before you encrypt anything important.
Can I encrypt files with this tool?
This page is text-only. AES-GCM works equally well on binary data — you can extend the same code to read a File via FileReader.readAsArrayBuffer and pass the ArrayBuffer to crypto.subtle.encrypt. The output and decrypt format would be identical except larger. We may add a file mode in the future.
Why AES-GCM and not AES-CBC?
AES-CBC provides confidentiality but no integrity — an attacker who can flip ciphertext bits can manipulate plaintext bits in predictable ways (padding-oracle attacks are the classic example). AES-GCM is an AEAD mode: it returns ciphertext with a built-in authentication tag, so any modification causes decryption to fail loudly rather than silently produce garbage. For new code, use GCM (or ChaCha20-Poly1305).
Is the output the same every time?
No, and that is by design. Both the salt and the IV are randomised per message, so encrypting the same plaintext with the same passphrase produces a completely different base64 string each time. This prevents an observer from learning that two ciphertexts share the same plaintext, and is required for AES-GCM security.