OpenPGP Key Generation and Inspection
EncodingEverything runs locally in your browser — nothing is uploaded
Really generated, not a demo: field arithmetic, Edwards-curve point operations, SHA-512 and the OpenPGP packet layout are all self-contained, and the resulting public/secret key blocks import into `gpg --import` (both the self-signature and the subkey binding are genuinely computed). Three modes: generate, parse, and build a gpg command. Randomness comes from `crypto.getRandomValues` and the key is born in your browser — nothing is uploaded. That is the point of this tool: rather than handing a private key to some website, you can keep it on your own machine.
Features
- Really generates an Ed25519 primary key (pinned by RFC 8032 vectors)
- Optional X25519 encryption subkey (RFC 7748) with a binding signature
- The exported ASCII armor imports into gpg — public and secret both usable
- Parse mode: fingerprint (v4 SHA-1 / v5 SHA-256), key ID, algorithm, created, expiry
- Verifies the armor’s CRC24 and flags altered or truncated data
- Builds a `gpg --quick-generate-key` command, with expiry and subkey hints
- Parses Ed25519, X25519, RSA, DSA and other keys
- Copy a single row, or all of them
How to use
- Choose Generate, Parse or Build gpg command
- Generate: set a User ID, algorithm and expiry; you get public and secret armor
- Parse: paste an ASCII armor or hex into the input
- Save the armor to a file and run `gpg --import`
FAQ
- Does the generated private key have a passphrase?
- No. This tool does not implement S2K encryption, so even with "passphrase protection" ticked the secret key has no passphrase. Import it and immediately run `gpg --edit-key <fingerprint> passwd` — an unprotected key works for anyone who obtains it. Refusing to pretend is deliberate: a false sense of protection is the worst outcome.
- Why is v5 key parsing limited?
- The fingerprint algorithm is separated (v4 uses SHA-1; v5 uses SHA-256 with different prefix and length fields), but the v5 key material and subpacket layout are not fully parsed yet. The overwhelming majority of keys in the wild are still v4.
- Does gpg really accept these keys?
- Yes. It was tested against gpg 2.4 during development: after import the self-signature is valid, the key signs and verifies, and the X25519 subkey’s binding signature is valid and usable for encryption. Every byte of the key packets, User ID, self-signature and subkey binding follows the OpenPGP spec.
- Is it safe to generate a key in a web page?
- This page computes entirely locally, sends no requests and has no server. But the page came from the network and you cannot audit it. The key will also live on your screen, in the clipboard and in whatever you download — import it into your keyring soon and do not paste it into a chat. For the highest assurance, still generate with `gpg` on your own machine.
Related tools
RSA
EncodingEncrypt, decrypt, sign and verify with RSA PEM keys, or generate a 1024–4096-bit key pair. Reads SPKI, PKCS#8 and PKCS#1. All local.
SSH Keys
EncodingParse an SSH public key for type, bits, SHA-256 and MD5 fingerprints and authorized_keys options, or generate an Ed25519 / RSA key pair.
Self-signed Cert
EncodingGenerate an RSA key pair and a self-signed X.509 certificate in the browser. 1024–4096-bit keys, SHA-256/384/512, optional SAN. For local HTTPS.
Base64
EncodingConvert text to Base64 and back, with correct UTF-8 handling for accents, CJK and emoji. Runs entirely in your browser — nothing is uploaded.
URL Encode
EncodingEscape text into %XX form and back again, treating a whole URL and a single parameter value as different jobs. Runs entirely in your browser.
HTML Entities
EncodingTurn < > & and quotes into HTML entities and decode them back in a single pass, so &lt; becomes <, not an angle bracket. Runs in your browser.