Free tool

Age Encrypt

Encrypt something to an age1... recipient or to a plain ssh-ed25519 public key, without installing anything. The page does the crypto locally and the result is an ordinary age file.

One per line. An age recipient (age1...) or an OpenSSH public key (ssh-ed25519 ... or ssh-rsa ...).

Or encrypt a file instead:

How to use it

Paste one or more recipients. Each line is either a native age recipient that starts with age1, or an OpenSSH public key of the kind you would put in authorized_keys. Mix them freely: a file encrypted to four recipients opens for any one of them.

Type your message, or pick a file. Press encrypt. Copy the armored block into an email, or download the binary .age.

Decrypting

The output is a standard age file, so the recipient decrypts it with the normal tools and nothing from this page:

# encrypted to an SSH key
age -d -i ~/.ssh/id_ed25519 report.age > report.txt

# encrypted to an age recipient
age -d -i key.txt report.age > report.txt

Why SSH keys work at all

An Ed25519 signing key and an X25519 encryption key are the same curve seen two ways, so an ssh-ed25519 public key can be converted to a Montgomery point and used for a key exchange. age has supported this since the beginning, and it is why you can encrypt to somebody using only the key already sitting in their GitHub profile.

Two things to know. The conversion is defined for ssh-ed25519 and ssh-rsa only, so ecdsa-sha2-* and sk-* keys are rejected. And an SSH stanza carries a 4 byte fingerprint of the public key, which means an age file encrypted this way names the key it was encrypted to. Native age1 recipients do not leak that. If who-can-open-this is itself sensitive, use an age recipient.

Where the crypto happens

In the tab you have open. The page loads typage, Filippo Valsorda’s TypeScript implementation of age, plus noble for the curve and hash work. Encryption runs against the bytes in the textarea and writes the result back to the page. There is no request, no worker with network access, and no server side to this tool. Read the page source if you would rather check than take our word for it.

The SSH recipient types are not part of typage, so we implemented those two stanza formats ourselves against the age specification, and verified the output decrypts with the upstream age CLI.

Why there is no decrypt button

Decrypting needs a private key. A web page is the wrong place to paste one, and a security company inviting you to do that would be setting a bad example. Decrypt at a shell, with age.