AnyTool
Your files never leave your device. All processing happens locally in your browser.

How do you share a password securely with an encrypted link?

Type the secret into Secure Password Share and it is encrypted in your browser with AES-256-GCM. The encrypted payload is packed into the link’s URL fragment (the part after #), which browsers never send to any server — so the secret is never uploaded. Send the link over a private channel; in passphrase mode, send the passphrase over a different channel. Everything runs 100% client-side with no backend.

  • AES-256-GCM authenticated encryption via the Web Crypto API — random key or PBKDF2-HMAC-SHA-256 passphrase
  • The ciphertext travels in the URL #fragment, which is never transmitted to a server
  • Random-key mode opens instantly; passphrase mode keeps the key out of the link as a second factor
  • Recipient reveals and decrypts locally, with copy-and-clear and a per-device viewed flag
  • Honest: with no backend this is not a true one-time / burn-after-read secret

What is

Encrypted secret-sharing link

An encrypted secret-sharing link is a URL that carries an end-to-end encrypted secret so a recipient can decrypt it without the sender storing it on a server. This tool encrypts the secret in the browser with AES-256-GCM and places the entire ciphertext in the URL fragment (after the # symbol), which browsers never include in the HTTP request — achieving a zero-knowledge, no-backend design similar to PrivateBin. In random-key mode the decryption key is embedded in the link; in passphrase mode the key is derived from a passphrase with PBKDF2 and is never in the link. Because there is no backend, it cannot enforce true burn-after-read or expiry.

Security & Privacy

Related terms

AES-256-GCMWeb Crypto APIPBKDF2URL fragmentzero-knowledgeend-to-end encryptionPrivateBinone-time secretburn after readingbase64url

Frequently Asked Questions

No. The secret is encrypted in your browser and the ciphertext rides in the URL fragment, which is never sent to a server.

Encryption happens entirely on your device with the browser’s Web Crypto API. The encrypted payload is stored in the URL fragment — the part after the # — which browsers do not include in the HTTP request, servers and proxies do not log, and the Referer header strips. There is no backend, database, upload or CDN in the crypto path, and no analytics; the secret lives only in the link and your clipboard.

No. With no backend it cannot burn after reading — anyone with the full link can open it until you delete it where you shared it.

A real burn-after-read secret needs a server to store the ciphertext and delete it after the first fetch. This tool has no server, so the encrypted secret lives inside the link itself and keeps working every time the link is opened. The “viewed” flag is stored in your browser only and cannot stop someone opening the same link on another device. For guaranteed one-time access and expiry, use a hosted service such as onetimesecret.com or a self-hosted PrivateBin.

A random-key link embeds the key (opens instantly); a passphrase link keeps the key out of the URL as a second factor.

In random-key mode a fresh 256-bit AES key is generated and packed into the link alongside the ciphertext, so anyone with the full link can open it — treat the whole link as the secret. In passphrase mode the key is derived from a passphrase with PBKDF2-HMAC-SHA-256 and only the ciphertext is in the link; the recipient must also enter the passphrase, which you send over a different channel. A leaked passphrase-mode link alone cannot be decrypted.

Send the link over a private channel and, in passphrase mode, send the passphrase over a separate channel; delete both after use.

Use a private, trusted channel for the link (not a public post), and in passphrase mode send the passphrase through a different app or medium so a single intercepted message is not enough. Delete the message once the recipient has retrieved the secret, since the link keeps working. Be aware that URLs can be cached in browser history, chat link previews and security scanners, so treat the link as sensitive.

Detailed Explanation

How It Works

What This Tool Does

Secure Password Share is a 100% client-side tool for sending a secret — a password, API key, recovery code or private note — as an end-to-end encrypted link. A pure engine (secretShareEngine.ts) encrypts the secret in the browser with AES-256-GCM and packs the whole ciphertext into the URL fragment (the part after #), which browsers never send to a server. The recipient opens the link and decrypts it locally. There is no backend, no upload and no database; the link itself is the encrypted message.

  • Encrypts a secret in the browser with AES-256-GCM (Web Crypto API)
  • The encrypted payload rides in the URL #fragment, never transmitted to a server
  • Self-contained: the link carries everything needed to decrypt
  • Recipient decrypts locally with reveal, show/hide and copy-and-clear
  • No backend, no upload, no CDN in the crypto path
Methodology

How the Two Modes Work

In random-key mode the engine generates a fresh 256-bit AES key with crypto.getRandomValues, encrypts the secret with AES-256-GCM under a random 12-byte IV, and base64url-encodes iv ‖ rawKey ‖ ciphertext+tag into the fragment as #s1k.… — so the link opens with no passphrase. In passphrase mode it reuses the audited textCryptoEngine: PBKDF2-HMAC-SHA-256 stretches the passphrase over a random salt into the AES key, and only version ‖ iterations ‖ salt ‖ iv ‖ ciphertext+tag is placed in the fragment as #s1p.… — the passphrase is never in the link. GCM is authenticated, so a wrong key or any tampering fails to decrypt.

  • Random-key: #s1k.base64url(iv ‖ 256-bit key ‖ ciphertext+tag)
  • Passphrase: #s1p.base64url(version ‖ iterations ‖ salt ‖ iv ‖ ciphertext+tag)
  • PBKDF2-HMAC-SHA-256 key stretching; iteration count stored in the payload
  • AES-GCM authentication tag detects tampering or a wrong passphrase
  • base64url (RFC 4648 §5) keeps the payload URL-safe
Technical Details

Why the URL Fragment Is Private

A URL fragment (everything after #) is a client-side construct: it is not included in the HTTP request line, so web servers, reverse proxies and the AnyTool host never receive or log it, and modern browsers strip it from the Referer header sent to third parties. This is the same zero-knowledge property PrivateBin relies on, where the server stores only an opaque blob and the key stays in the fragment. Here there is no server at all: the ciphertext and (in random-key mode) the key live only in the fragment, so nothing is uploaded and the tool works fully offline once cached.

  • Fragments are never part of the HTTP request — servers cannot log them
  • Stripped from the Referer header sent to other origins
  • Same fragment-key model as PrivateBin, but with no backend at all
  • Works offline once the page is cached (PWA)
  • All randomness from crypto.getRandomValues — never Math.random
Limitations

Honest Limitations

This is end-to-end encrypted but it is not a true one-time or self-destructing secret. Because there is no backend to store and delete the ciphertext, anyone holding the full link can open it repeatedly until the sender deletes it from wherever it was shared, and the tool cannot enforce server-side expiry. The “viewed” flag is stored on the opening device only and cannot prevent a different device from opening the same link. URLs may also be retained in browser history, chat link previews and security scanners. In random-key mode the key is inside the link, so a leaked link is a leaked secret; passphrase mode adds a second factor but relies on the passphrase being shared over a different channel. For guaranteed burn-after-read and expiry, use a hosted service such as onetimesecret.com or a self-hosted PrivateBin.

  • No backend → no true burn-after-read and no server-side expiry
  • Anyone with the full link can decrypt it repeatedly
  • The “viewed” flag is per-device only, not a global lock
  • Links can be cached in history, previews and scanners
  • Random-key links: the link itself is the secret — share privately
Privacy & Security

Private by Design

The secret is encrypted entirely on the user’s device with the browser’s Web Crypto API, and the ciphertext is stored only in the URL fragment, which is never sent to a server. There is no upload, no database, no logging, no server and no CDN in the crypto path, and no analytics or telemetry anywhere in the tool. The secret exists only in the link and, briefly, the clipboard; the reveal view offers a copy-and-clear action and can strip the link from the current tab. The tool works offline once cached, supports dark mode and a mobile-first layout, and the only optional network use anywhere on the site is consent-gated ads, which never see the secret.

  • Encryption runs locally — nothing uploaded, logged or stored on a server
  • Ciphertext lives only in the #fragment and the clipboard
  • No server, no CDN, no analytics in the crypto path
  • Copy-and-clear and a strip-from-tab action for the recipient
  • Works offline once cached; dark-mode and mobile-first
Random-key vs passphrase links
AspectRandom-key link (#s1k)Passphrase link (#s1p)
Opens withJust the link (key embedded)Link plus the passphrase
Key derivationRandom 256-bit AES keyPBKDF2-HMAC-SHA-256 from the passphrase
If the link leaksThe secret is exposedStill safe without the passphrase
What to share separatelyNothing — the link is the secretSend the passphrase over a different channel
Best forSpeed and convenienceHigher-stakes secrets needing a second factor

Both modes are AES-256-GCM and 100% client-side. Neither is a true burn-after-read secret — there is no backend to delete the ciphertext. As of July 2026.