Encrypted Secret Note
Encrypt and decrypt notes with AES-GCM and a password.
How to Use Encrypted Secret Note
On the Encrypt tab, type a note and a password, then press the button โ the Base64 ciphertext appears below. Copy it to the recipient, who opens the Decrypt tab and enters the same password to recover the note. The password is never stored, so send it through a separate channel from the ciphertext.
Concrete examples
- "Room PIN is 4821" + password
tea-spoon-9→ av2.salt.iv.bodyciphertext likev2.k3v...== . pQ... . 9aB... - Encrypt the same note twice → the Base64 differs each time, because the salt and IV are random
- Decrypt tab with that ciphertext +
tea-spoon-9→ "Room PIN is 4821" is recovered - One wrong character in the password → "Wrong password or invalid ciphertext" (no content is shown)
- Trim or tamper with the ciphertext → AES-GCM authentication fails, same decrypt error
Safe Sharing Pattern
Send the encrypted text through one channel and the password through another channel. For example, send the ciphertext in chat and share the password by voice. This tool is for short notes and temporary sharing; it is not a password manager or long-term secure storage system.
How the ciphertext is put together, and how long it gets
The output has four dot-separated parts. The decrypting side reads the shape to tell which generation of ciphertext it is looking at.
| Part | Contents | Base64 characters |
|---|---|---|
v2 | Format marker | 2 (plus the dot) |
| salt | 16 random bytes, so the same password yields a different key every time | 24 |
| IV | 12 random bytes (the AES-GCM initialisation vector) | 16 |
| body | The encrypted note plus a 16-byte authentication tag | Proportional to the note |
So the length works out to roughly 66 + (UTF-8 bytes of the note ร 1.34) characters. A 32-byte note comes to 109 characters. Japanese text runs three bytes per character, so every ten Japanese characters add about 40 characters of ciphertext โ handy when you need to fit inside a QR code or a chat length limit.
Base64 can contain +, / and =, so URL-encode the string before putting it in a query parameter. Line breaks inside the body are ignored on decryption, but losing the leading v2 or any of the dots makes the ciphertext undecryptable. The usual way this happens is pasting with a mail quote marker (>) or a bullet character stuck to the front. Older three-part ciphertexts without the v2 marker (made with 100,000 PBKDF2 iterations) still decrypt as they are.
Your password is what decides the strength
The key is stretched from your password with PBKDF2-HMAC-SHA256, 600,000 iterations, matching the figure OWASP publishes for PBKDF2. The point is to force that same work on every brute-force attempt, so pressing encrypt or decrypt can take up to about a second on some devices. That delay is the cost working as intended, not the page being slow.
No number of iterations rescues a guessable password such as 1234 or password. Avoid dictionary words and dates; use a passphrase of several unrelated words, or a long random string from the Password Generator. Because the salt changes every time, precomputed rainbow tables cannot attack many notes at once โ but none of that helps if the password itself is weak.
What this tool cannot protect you from
AES-GCM detects a change of even one byte, but that is tamper detection, not proof of authorship. Anyone who knows the password can produce a fresh ciphertext in the same format, so it says nothing about who wrote it. The password is never stored and cannot be recovered, which also means nobody โ including us โ can decrypt a note whose password has been forgotten. Use a password manager for long-term storage and credentials, and keep this tool for handing a short note over once.
If the device itself is compromised โ a keylogger, screen recording โ running inside the browser does not help; the input is captured before encryption. The failure message is deliberately the same for a wrong password and for tampering, so an attacker learns nothing from it. Encryption uses the browser's Web Crypto API, which assumes the page was opened over HTTPS.
- There is no expiry. The ciphertext stays in chat history and mailboxes, and anyone who later learns the password can read it. Ask for the message to be deleted, or avoid reusing the password.
- The decrypted text stays on screen. The field is read-only, so close the tab or reload the page when you are done.
- The other person needs this same tool. The format is specific to this page, so general-purpose encryption software will not read it. Send them the URL along with the ciphertext.