How it works
We encrypt and decrypt data locally in your browser. The server delivers the application, but your plaintext and encryption key are not submitted to it during encryption or decryption.
Encryption
- You enter plaintext.
- An encryption key is generated or supplied.
- Your browser encrypts the data locally.
- The result is encoded into our payload format.
- Only the encrypted result is meant to be shared.
Decryption
- You open or paste an encrypted payload.
- You provide the encryption key.
- Your browser decrypts the payload locally.
- The plaintext is displayed locally.
Cryptography
- Algorithm: AES-256-GCM (authenticated encryption — confidentiality and integrity in one step).
- Key derivation: PBKDF2-SHA256, 210,000 iterations.
- API: the browser's Web Crypto API (
crypto.subtle). - Salt: 16 random bytes, freshly generated per encryption.
- Nonce/IV: 12 random bytes, freshly generated per encryption.
- Random source:
crypto.getRandomValues.
Payload format
An encrypted payload is the prefix NA1: followed by a base64url-encoded JSON object:
v— format version.kdf— key-derivation identifier (PBKDF2-SHA256).i— PBKDF2 iteration count.s— salt, base64url-encoded.n— nonce/IV, base64url-encoded.ct— ciphertext plus the GCM authentication tag, base64url-encoded.
Links
A decrypt link places the encrypted payload after #, e.g. /decrypt?string#NA1:.... Everything after # is a URL fragment: your browser keeps it local and never sends it as part of the HTTP request, so it never reaches our server.
What we don't protect against
We protect data after it has been encrypted. We can't protect data on a compromised device or browser, or if someone obtains your encryption key.
Browser extensions, malware, clipboard history, screenshots, and similar local access remain outside the protection provided by encryption.
No lock-in
The format above is documented so encrypted data can remain recoverable even if this website no longer exists.
