Text encryption with AES-256-GCM, done properly in your browser
This text encryption tool turns a message into an unreadable string that only someone with the password can open. It uses AES-256-GCM, the authenticated cipher used by TLS, with a key derived from your password by PBKDF2-SHA-256 at 600,000 iterations — the figure OWASP recommends for PBKDF2-HMAC-SHA256. All of it runs through the Web Crypto API built into your browser; nothing is sent to a server.
Use it to send a password, an API key, bank details or a private note over email, chat or a ticketing system, to keep a secret inside a plain-text file, or to password-protect a file before uploading it to shared storage. Decryption works the same way on any device: paste the string (or drop the .enc file), enter the password, done.
Because GCM is an authenticated mode, a wrong password or a single altered character produces a clear “decryption failed” error rather than garbage — you will never be fooled by a tampered message.
How to use the Text Encryption
- Choose “Encrypt”, then “Text” or “File”.
- Enter a password. A multi-word passphrase from the Passphrase Generator is ideal; the hint below the field rates what you typed.
- Paste your message, or drop a file (up to 200 MB) onto the drop area.
- Press “Encrypt text” and copy the
UV1.…string, or “Encrypt file” to download the.encfile. - To decrypt, switch to “Decrypt”, paste the string or drop the .enc file, enter the same password and press the button. “Use result as input” flips the output straight back for a quick test.
Text Encryption features
AES-256-GCM with authentication
A 256-bit key and a 16-byte authentication tag mean wrong passwords and corrupted data are detected, not silently decrypted into nonsense.
Slow, salted key derivation
PBKDF2-SHA-256 with 600,000 iterations and a random 16-byte salt makes every guess at your password expensive and prevents precomputed rainbow tables.
Fresh randomness every time
A new salt and 12-byte IV from crypto.getRandomValues on each run, so encrypting the same text twice gives different output.
Text and files
Encrypt a message to a copyable Base64 string, or any file to a .enc download, and reverse both.
Self-describing format
The output carries a version marker so it can always be decrypted later, even if the tool gains new options.
Nothing leaves your device
Encryption, decryption and key derivation all run inside your browser via the Web Crypto API.
How the encryption scheme works
Example: encrypting a 25-character message produces 16 + 12 + 25 + 16 = 69 bytes, which Base64 turns into 92 characters plus the 4-character prefix.
- A random 16-byte salt and a random 12-byte IV (nonce) are generated with
crypto.getRandomValues. - Your password (UTF-8) and the salt go through PBKDF2 with HMAC-SHA-256 for 600,000 iterations, producing a 256-bit AES key. This takes a fraction of a second for you but multiplies an attacker’s cost per guess by 600,000.
- The message is encrypted with AES-256-GCM using that key and IV. GCM also produces a 16-byte authentication tag that covers the whole ciphertext.
- The output is
salt ‖ IV ‖ ciphertext ‖ tag, Base64-encoded and prefixed withUV1.(text) or the bytesUVENC1\0(files). Everything needed to decrypt except the password is inside the output, so no settings have to be remembered.
Choosing a password that holds up
The ciphertext is only as strong as the password, because anyone who has the string can guess passwords offline with no rate limit. At 600,000 PBKDF2 iterations, a fast GPU manages only tens of thousands of guesses per second, so a random 12-character password or a five-word passphrase (about 65 bits) is far beyond reach, while a dictionary word with a number is not.
Send the password through a different channel from the ciphertext — for example the encrypted text by email and the password by phone or messenger. Never put both in the same message. You can test a candidate with the Password Strength Checker.
Limits and honest caveats
- Output from this tool uses its own simple container, not OpenPGP or the age format, so it can only be decrypted by this page (or by any code that follows the scheme above — it uses only standard primitives). For public-key encryption and signatures that GnuPG reads, use PGP encrypt and decrypt.
- Files are read fully into memory, so very large files may be slow or fail on phones; the limit is set to 200 MB for that reason.
- Encryption protects confidentiality and integrity, but not metadata: the length of the message and the file name of a .enc download are visible.
- If you forget the password there is no recovery. There is no back door, by design.
- To verify that a file arrived intact without encrypting it, use the File Hash Checker.
Text Encryption FAQ
Is this text encryption tool secure?
It uses standard, well-reviewed primitives — AES-256-GCM and PBKDF2-SHA-256 — exactly as implemented by your browser’s Web Crypto API, with random salts and IVs. The weakest link is the password you choose, so use a long one.
Does my text or password get uploaded?
No. The page makes no network requests with your data; you can verify this with your browser’s developer tools. Closing the tab removes everything.
Can I decrypt the text on another device or in the future?
Yes. The output contains the salt, IV and version marker, so any browser running this tool can decrypt it with the password. The format is documented above so it can also be decrypted by a few lines of code.
What happens if I enter the wrong password?
AES-GCM verifies an authentication tag before returning anything, so a wrong password or altered ciphertext produces a clear error. You never get a garbled “half-decrypted” message.
Why 600,000 iterations?
It is the current OWASP recommendation for PBKDF2 with HMAC-SHA-256. It is slow enough to blunt offline guessing while taking well under a second in a modern browser.
Is AES-256 stronger than AES-128?
Both are considered unbreakable by brute force. AES-256 is chosen here because it costs nothing extra in a browser and matches what most people expect of “strong” encryption.