SSH Public Key Parser

Decode an OpenSSH public key into its algorithm, key size, comment and fingerprints — the same SHA256 and MD5 values ssh-keygen -l prints. Handles authorized_keys options, known_hosts entries, OpenSSH certificates and RFC 4716 blocks. Runs entirely in your browser; no key ever leaves your device.

Try:
Key report

About this tool

SSH public key parser takes an OpenSSH public key and tells you what is actually inside it: the algorithm, the key family and size in bits, the comment, and the fingerprints — the same SHA256: and MD5: values ssh-keygen -l prints. It is the answer to "someone pasted a key into a ticket, is this the one I authorised?" without having to save the key to a file and shell out.

Everything runs in your browser via WebAssembly. Nothing is uploaded.

What you can paste

Multiple keys at once are fine: one per line, blank lines and # comments ignored.

Worked example

Paste an Ed25519 key:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPc21YeL9wdmn0Bvy1dVCZH/rO/hcbVFBt5YQ/Y8+oOy [email protected]

and you get back:

{
  "key_count": 1,
  "unique_fingerprints": 1,
  "keys": [
    {
      "index": 1,
      "source_format": "openssh",
      "algorithm": "ssh-ed25519",
      "key_type": "Ed25519",
      "is_certificate": false,
      "key_size_bits": 256,
      "comment": "[email protected]",
      "fingerprint_sha256": "SHA256:/PcooB4wsFrX/EAwN1wlE0KJbNvM1usU1KT6lCXUah4",
      "fingerprint_md5": "MD5:1e:e5:90:86:13:ab:0e:5a:24:3a:30:5d:7b:53:e3:fe",
      "blob_bytes": 51,
      "strength": "strong",
      "warnings": []
    }
  ]
}

unique_fingerprints is worth a glance when you paste a whole authorized_keys file — if it's lower than key_count, the same key is authorised twice under different comments.

Verifying a fingerprint

Put a fingerprint you were given out of band into Expected fingerprint and every key gains a fingerprint_match boolean, plus the report gains expected_fingerprint_matched. The comparison is deliberately forgiving about how the fingerprint was written down: SHA256:<base64>, the bare base64, MD5:aa:bb:…, bare colon-hex and plain hex all work, and prefixes, colons, spaces and hex case are ignored. That means you can paste straight out of a wiki page, a ssh host-key prompt, or a cloud console without reformatting it.

Strength ratings and warnings

Each key is rated strong, acceptable or weak, with plain-language warnings:

Certificates

For a *[email protected] blob you also get the certificate type (user or host), serial, key ID, principals, the validity window with a status and days-until-expiry, critical options, extensions, and the signing CA's algorithm and SHA-256 fingerprint.

Note that the fingerprint reported for a certificate is the fingerprint of the certified public key, not of the certificate envelope — this matches what ssh-keygen -l prints, so the value lines up with the plain .pub file the certificate was issued against.

Legacy fingerprint options

Limits

Also available from the gizza CLI and in chat.

FAQ

Is it safe to paste a key here?

For a public key, yes — parsing happens entirely in your browser via WebAssembly, so nothing is uploaded, logged or stored on a server. A public key is also, by design, not a secret: it's the half you hand out.

Private keys are a different matter, and this tool refuses to parse them at all. If you paste one, you get an error telling you so rather than a decode.

Why does it reject my private key?

Because a private key should never be pasted into a web page, and a tool that quietly accepted one would be training the wrong habit. If the input starts with -----BEGIN OPENSSH PRIVATE KEY----- (or any other private-key armor), the parser stops and tells you to use the matching .pub file instead.

If you've lost the .pub file, regenerate it locally with ssh-keygen -y -f ~/.ssh/id_ed25519, then paste that.

How is this different from running ssh-keygen -l?

The fingerprints are identical — that's the point, and the parser follows ssh-keygen semantics exactly, including the certificate rule described above. What you get on top is everything ssh-keygen -l doesn't print: the source format it detected, the authorized_keys options or known_hosts host patterns, FIDO application strings for sk-* keys, full certificate details, a strength rating with warnings, and MD5 and SHA-1 alongside SHA-256 in one pass.

It also works on a key you were sent, without first saving it to a file — and on a machine where you don't have ssh-keygen.

My key's comment is missing from the output. Where did it go?

The comment field is optional in every SSH key format, and it's routinely stripped by tooling that round-trips keys — cloud consoles, config-management templates and copy-paste through chat clients all drop it. If comment is absent from the report, the key you pasted genuinely doesn't carry one.

The comment is also not part of the key, so it never affects the fingerprint. Two lines with the same base64 blob and different comments are the same key.

Can I paste a whole authorized_keys or known_hosts file?

Yes — up to 200 keys and 256 KiB. Blank lines and # comment lines are skipped, and each entry is reported separately with a 1-based index so you can map results back to line order. If one entry is malformed, the rest are still parsed and the bad one is flagged with a warning rather than failing the whole run.

Comparing key_count against unique_fingerprints is a quick way to spot duplicate authorisations in a file that's grown over the years.

What does a hashed |1| known_hosts entry give me?

Everything except the hostname. OpenSSH's HashKnownHosts replaces host patterns with an HMAC-SHA1 of the hostname, which is a one-way function — the parser reports hashed_hosts: true and the key details, but the original host cannot be recovered from the entry by this tool or any other.

To find the line for a specific host in a hashed file, use ssh-keygen -F hostname, which recomputes the HMAC with each line's salt and compares.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool ssh-public-key-parser "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPc21YeL9wdmn0Bvy1dVCZH/rO/hcbVFBt5YQ/Y8+oOy [email protected]"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/ssh-public-key-parser/?input=ssh-ed25519%20AAAAC3NzaC1lZDI1NTE5AAAAIPc21YeL9wdmn0Bvy1dVCZH%2FrO%2FhcbVFBt5YQ%2FY8%2BoOy%20alice%40example.com&expected_fingerprint=SHA256%3A%2FPcooB4wsFrX%2FEAwN1wlE0KJbNvM1usU1KT6lCXUah4&include_sha1=true&uppercase_md5=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.