New 58+ tools are now available — built to keep your workflow moving.

ChaCha20 Encryption

Encrypt text with ChaCha20-Poly1305 into one copyable line. Authenticated, and the passphrase never leaves your browser.

Text is handled as UTF-8, so accents and emoji survive the round trip. An envelope is one line beginning with CTC1; line breaks in it are ignored, so a wrapped paste is fine.

The passphrase is never stored and there is no way to recover a message without it. A few random words beat a short complicated password, and reusing a passphrase across unrelated messages is what actually weakens this.

This runs entirely in your browser, so neither the text nor the passphrase is uploaded. The result is a single line beginning with CTC1 that holds the salt, nonce, authentication tag and ciphertext together. Save it: the passphrase exists only in this page, so closing the tab without copying the envelope loses the message.

Choose a file first — Run stays disabled until the file is selected.

File ready — press Run to start.

Optimizing your file…

Your result is ready — download it below:

Re-encoded without size gain Download links expire within 30 minutes.

This image appears to be already optimized — try a lower quality setting for a smaller file.
No logo or watermark was detected in the marked corners — your images were delivered unchanged.

No result to display for the current input.

ChaCha20 Encryption Online

Encrypt text with ChaCha20-Poly1305 into one copyable line. Authenticated, and the passphrase never leaves your browser.

Encrypt Text With ChaCha20-Poly1305 In Your Browser

ChaCha20 Encryption takes a piece of text and a passphrase, and gives back one line that looks like noise. Paste that line somewhere safe and hand over the passphrase separately, and whoever has both can read the message. This uses the AEAD construction defined in RFC 8439, which pairs the ChaCha20 stream cipher with a Poly1305 tag so a message that has been altered in transit is rejected instead of quietly producing garbage. The work happens in your browser: neither the text nor the passphrase is ever sent anywhere.

What The Envelope Contains

The result is six dot-separated fields on a single line, starting CTC1: the marker, the key derivation cost, and then the salt, nonce, authentication tag and ciphertext as Base64. The salt and nonce are freshly generated for every message, which is why encrypting the same text twice gives two different results. That is not noise in the output — it is what stops an observer from telling that two messages are the same, and what stops a reused nonce from leaking the relationship between them.

Because it is one line of ordinary characters, it survives being pasted through a chat window, a ticket, an email or a shell command without escaping. If your terminal wraps it across lines, the extra whitespace is ignored on the way back in.

Why The Passphrase Is Stretched

Your passphrase is not used as the encryption key directly. It is run through PBKDF2-HMAC-SHA256 at 600,000 iterations with the per-message salt, producing the 32-byte key that ChaCha20 actually uses. The reason is that a passphrase is a low-entropy secret, and a key derived from it without any stretching can be attacked far faster than the encryption itself: an attacker testing candidate passphrases only has to repeat the derivation, not the cipher. Stretching makes each guess deliberately expensive, and the iteration count is stored in the envelope so it can be raised later without breaking anything already encrypted.

What The Authentication Tag Buys You

A bare stream cipher like ChaCha20 on its own gives you confidentiality and nothing else. Encrypt with the wrong key and you get a page of confident-looking rubbish with no way to tell it from the original, and someone who can alter the ciphertext can flip specific bits and change what your message says. Poly1305 fixes both. It computes a tag over the ciphertext that only verifies with the right key, so this tool can reject a bad passphrase, a truncated paste or a tampered envelope before showing you anything.

That is also why there is no "raw" mode here. It is possible to expose unauthenticated ChaCha20, but the failure mode is a wrong passphrase that looks like a successful decryption, and that is a trap rather than a feature.

What This Tool Does Not Do

This is symmetric encryption: the same passphrase both locks and unlocks. That means the passphrase has to travel to whoever needs to read the message, and if that channel is not secure the encryption buys much less than it appears to. There is also no recovery. Because the key is derived from the passphrase and the passphrase is never stored, an envelope whose passphrase is lost cannot be decrypted by anyone, including this tool.

Treat the passphrase like the message it protects. Do not put it in the same place as the envelope, and do not reuse one passphrase across messages that need to stay unrelated.

A Note On How The Cipher Is Implemented

The browser has no ChaCha20 of its own — Web Crypto offers AES-GCM and nothing usable for this cipher — so the primitive is implemented directly in JavaScript and checked against the published RFC 8439 test vectors. That Poly1305 implementation uses BigInt rather than the usual array of 26-bit limbs, and the reason is worth stating plainly: the standard limb layout sums several products that reach roughly 2^57, which is past the point where JavaScript numbers stop being exact. In C that is harmless because integers are 64 bits wide, but in JavaScript it quietly produces a wrong tag for any message longer than one block while a single-block message still looks correct. One BigInt multiply per block is a fair price for an authenticator that is actually right.

Frequently asked questions

Is my text or passphrase sent to a server?

No. The key derivation and the encryption both happen in your browser, and only the finished envelope is ever displayed. This is the main reason it is built this way: a passphrase that reaches a server has left your machine, along with whatever else is on it.

I lost the passphrase. Can the message be recovered?

No, and that is the point of the encryption. The key is derived from the passphrase and nothing else, and the passphrase is never stored, so there is no recovery path — not here, not for the site operator, not for anyone who finds the envelope. If losing the passphrase would be a serious problem, encrypt the message with a key you have backed up instead.

Why does encrypting the same text twice give different results?

Because a fresh random salt and nonce are generated for every message. Identical output for identical input would mean the same nonce was reused, which leaks whether two messages are the same and can compromise the keystream entirely. Use the difference as reassurance, not as a fault.

What happens if I paste the envelope in with a typo?

It is rejected. The Poly1305 tag covers the ciphertext, so an altered or truncated envelope fails to authenticate and the tool says so instead of showing you incorrect text. The message is unchanged; only the copy is damaged.

Can I use one passphrase for everything?

You can, but it is the weakest available choice. Reusing a passphrase across unrelated messages means anyone who recovers it from one of them has it for all of them, and it gives away that the messages are related. A separate passphrase per purpose costs nothing here, since there is no account and no key to manage.

Why ChaCha20 rather than AES?

Both are sound choices and AES-GCM is faster in hardware that has AES instructions. ChaCha20 earns its place in software because it performs the same on any processor, including phones and servers without those instructions, which is why TLS adopted it as well. For short messages the difference is academic; for a tool like this, either would be defensible.

What is the CTC1 prefix for?

It marks the envelope as belonging to this tool and version, and gives the parser something to check before it tries to interpret the rest. If a future version changes the format, old envelopes stay readable because the marker tells the tool which layout to expect.

About this tool

ChaCha20 Encryption turns text into a single line beginning with CTC1 that you can paste into a ticket, a chat or a config file, and opens it again with the same passphrase. It uses the authenticated AEAD construction from RFC 8439, so a modified or truncated message is detected rather than quietly turning into rubbish.

How to use: paste your text, type a passphrase, then press Run and copy the envelope. To read it back, switch the direction to decrypt and paste the envelope.

  • Runs entirely in your browser; text and passphrase are never uploaded
  • ChaCha20-Poly1305 with a Poly1305 authentication tag
  • Passphrase stretched with PBKDF2-HMAC-SHA256 at 600,000 iterations
  • A fresh random salt and nonce for every message

Related tools