Domainless · Encryption

Encryption that never leaves your device.

Lock text and files with a passphrase, share a secret that burns after one read, or send a message only one person can open. Every byte is encrypted right here in your browser — the server never sees your passphrase, your keys, or a single line of what you wrote.

Checking service…

It happens in your browser

The cryptography runs entirely on your device using the browser's built-in Web Crypto engine. Nothing to encrypt is ever uploaded — there's no server-side copy to leak, subpoena, or lose.

Zero-knowledge by design

For one-time secrets, only unreadable ciphertext is stored. The key travels inside the link itself, in the part browsers never send to a server. We couldn't read your secret if we wanted to.

Standard, audited crypto

AES-256-GCM with PBKDF2 key stretching — the same primitives that secure banks and password managers. No home-rolled ciphers, no obscurity. The whole method is written out below.

The most secure way to use these tools is to not have to trust us. Like any website, this page's code arrives from our server on every visit — if that server were ever compromised, so is the page. Take us out of the loop: download the offline app (one file, verifiable, works forever) or run your own copy from source. Same tools, same formats, no trust required.

Encrypt & decrypt

Protect text or a file with a passphrase. It's sealed with AES-256-GCM in your browser — nothing is uploaded, and only the passphrase can open it.

One-time secret

Turn a password, key, or note into a link that works exactly once — encrypted in your browser, read once, then gone.

One-time links need our server by design — the ciphertext lives here until it burns, so only ciphertext we can't read is stored. Anyone with the link can read the secret once, so send it through a channel you trust. For anything you intend to keep, use passphrase encryption above or the offline app.

Key exchange

A passphrase means both sides have to agree on a secret first. Public keys remove that step: publish your public key anywhere, and anyone can send you a message that only your private key can open. The keys are made in your browser (ECDH on curve P-256) and never uploaded.

1 · Make your keypair

2 · Encrypt to someone's public key

3 · Decrypt a message sent to you

How a passphrase lock works

  1. 1

    You type, your browser stretches

    Your passphrase is run through PBKDF2 — 250,000 rounds of hashing — into a 256-bit key. The stretching makes brute-forcing a weak passphrase far slower for an attacker.

  2. 2

    The data is sealed with AES-256-GCM

    A fresh random salt and nonce go into every operation, and GCM adds an authentication tag — so any tampering with the ciphertext is detected instead of silently decrypting to garbage.

  3. 3

    You share the block and the passphrase apart

    Send the encrypted block however you like; deliver the passphrase through a different channel. Neither half is useful alone, and the server was never in the loop.

What our server can and can't see

The honest inventory. This is the whole reason to encrypt on the device instead of on a server you have to trust.

Your passphrase
Never sent. It stays in the page.
Your text & files
Never uploaded. Encryption is local.
Your keys
Never leave the browser.
One-time secrets
Only ciphertext it can't read is stored, then burned.
Who you are
No account. Just a short-lived rate-limit counter.
The complete technical method

Where the work happens

Every cryptographic operation on this site runs in your browser through the Web Crypto API, the same vetted engine your browser uses for HTTPS. Your passphrase, your keys, and your plaintext are handled entirely on your device. The server's only job is to serve these pages and — for one-time secrets — to hold a blob of ciphertext it has no way to read.

Passphrase encryption (Text & File)

When you lock something with a passphrase:

  • A random 16-byte salt is generated, and your passphrase is stretched into a 256-bit key with PBKDF2-HMAC-SHA-256 at 250,000 iterations. Stretching makes guessing a weak passphrase expensive for an attacker.
  • The data is encrypted with AES-256-GCM using a fresh random 12-byte nonce. GCM also produces an authentication tag, so any later tampering is detected rather than silently accepted.
  • The output container is magic · salt · nonce · ciphertext. Text is base64url-armored behind a dlenc1: marker; files get a .dlenc extension. Everything needed to decrypt is inside the container — except the passphrase, which only you have.

Because the salt and nonce are random every time, encrypting the same text twice yields two completely different blocks. There is no decryption backdoor and no passphrase recovery: if you lose the passphrase, the data is gone.

One-time secrets

This is the only tool that talks to the server, and it's built so the server stays blind:

  • Your browser generates a random 256-bit key and encrypts the secret with AES-256-GCM locally.
  • Only the ciphertext is sent to the server, which files it under a random unguessable ID with your chosen expiry and read limit.
  • The decryption key is placed in the link's URL fragment (the part after #). Browsers never transmit the fragment to a server, so the key reaches the recipient without ever reaching us.
  • When the recipient opens the link and clicks to reveal, their browser fetches the ciphertext, decrypts it locally, and the server deletes the record once the read limit is reached.

A dump of our storage would reveal nothing but opaque bytes. The trade-off: anyone who has the full link can read the secret, so treat the link like the secret itself.

Key exchange (public keys)

The Keys tool uses ECDH on curve P-256. You publish a public key; a sender's browser generates a throwaway (ephemeral) keypair, performs an ECDH agreement with your public key to derive a one-off AES-256-GCM key, encrypts, and sends you the ciphertext plus the ephemeral public key. Only your private key can re-derive that AES key. This is the same ephemeral-static pattern used by tools like age.

What this protects — and what it doesn't

It protects: data sitting on someone else's server, files in a shared drive, a secret in transit through channels you don't control, a note you want read once. If the ciphertext leaks, it's useless without the key.

It does not protect against:

  • A compromised device — malware or a keylogger sees your plaintext before it's ever encrypted. Encryption assumes your own machine is trustworthy.
  • A weak passphrase — stretching buys time, not miracles. Use a long, unique passphrase; a manager-generated one is best.
  • Someone you chose to share with — once they can decrypt, they can do anything with the contents.
  • Anonymity — this hides content, not the fact that you connected. Pair it with the VPN if you need to obscure the connection itself.

Lawful use

Strong encryption is ordinary, legal, and protective — it's what keeps banking, messaging, and medical records safe. These tools exist to protect real people's privacy. They are not a shield for anything unlawful, and we'll cooperate with valid legal process to the (deliberately minimal) extent our design even allows.

Questions & answers

Does anything I encrypt get uploaded?

No. Text and file encryption happen entirely in your browser. The only feature that sends anything is the one-time secret — and it uploads only ciphertext the server can't read, never your key or plaintext.

If it's all client-side, why should I trust this website?

You shouldn't have to — and we mean that literally. Client-side encryption still means trusting the JavaScript our server sends on every visit; a compromised or coerced server could ship altered code and you'd never see it. That's why our standing recommendation is to download the offline app once — a single file you can verify by checksum and keep forever — or run your own copy from source, and treat this hosted page as the convenience option for low-stakes use. The formats are identical either way.

Can you recover my passphrase or decrypt something for me?

No, and that's the point. We never receive your passphrase or keys, so there's nothing on our end to recover from. If you lose the passphrase or a private key, the data it protected can't be opened by anyone — including us.

How strong is the encryption?

Passphrase locking uses AES-256-GCM with PBKDF2 key stretching (250,000 iterations of SHA-256). Public-key messages use ECDH on curve P-256 into AES-256-GCM. These are standard, widely-audited primitives — the same class of cryptography behind HTTPS and password managers. The full method is in How it works.

How is a one-time secret different from just encrypting text?

Convenience and self-destruction. With a one-time secret there's no separate passphrase to deliver — the link is the secret — and it deletes itself after it's read, so it doesn't linger in an inbox or chat history. Use passphrase encryption when you want the recipient to keep the data; use a one-time secret to hand something over and have it disappear.

Could a link preview or chat app burn my secret before it's read?

No. Opening a one-time-secret link doesn't reveal anything automatically — the recipient has to click "Reveal the secret" first. Automated link unfurlers never take that step, so the secret survives for the human.

What's the largest file I can encrypt?

There's no fixed limit anymore. Files are encrypted in 4 MB pieces, so even multi-gigabyte files work; in Chrome and Edge the result also streams straight to disk instead of filling memory. The encrypted container hides the original filename too, and restores it when decrypting.

What happens to my encrypted files if this site shuts down?

Nothing — they stay yours to open. Encryption happens on your device, so decryption never needed our server in the first place. To make that concrete, the Source & offline app page gives you a single-file offline app to keep with your backups, the full source code (MIT licensed) with instructions to run your own copy, a command-line tool, and a byte-exact format spec anyone can reimplement. The original version of this app is also kept frozen at /files/encrypt/legacy/. The one exception is one-time secret links: they live on the server and burn after reading — by design, they don't outlive it.

Does the recipient need an account, or this site, to decrypt?

No account, ever. To open passphrase or public-key output they can use the matching tool here, the downloadable offline app, or the command-line tool — the container formats are fully documented, so nothing is locked to us. A one-time-secret link decrypts itself when opened.

Can I use this to hide illegal activity?

No. Encryption here exists to protect ordinary people's privacy and security. It isn't a shield for anything unlawful, and misuse isn't welcome. Our design keeps us from seeing your content — which also means we can't and won't manufacture it, but we cooperate with valid legal process to the minimal extent our architecture allows.

Is this related to the rest of Domainless?

Yes — it's part of the same privacy toolkit as the VPN, private search, and data removal. Encryption hides the content of what you store and send; those tools cover the connection, your searches, and your exposure. Together they're the point of J&G Studios: privacy tools run by a person, not sold by a broker.

The safest copy of this tool is your copy

Here's the uncomfortable truth about every "client-side" web tool, ours included: your browser runs whatever code the server sends that day. If we were hacked, coerced, or turned bad, the page could change and you'd never know. So our standing recommendation is the opposite of lock-in — don't rely on us. Take a copy you control, verify it once, and it can never change under you. Nothing you encrypt depends on this website existing, either.

Offline app
One self-contained HTML file that encrypts and decrypts everything — keep it with your backups.
Full source code
MIT licensed, with a manual, a command-line tool, and instructions to run your own copy.
Frozen formats
Byte-exact spec; the original app stays online unchanged at /files/encrypt/legacy/.