PGP decrypt

Decrypt an ASCII-armored OpenPGP (PGP/GPG) message with your private key, or with the password it was symmetrically encrypted with. Embedded signatures are reported and can be verified — everything runs entirely in your browser.

Decryption result

About this tool

PGP decrypt opens an ASCII-armored OpenPGP (PGP/GPG) message and shows the decrypted payload as text, base64, or hex. Paste the full -----BEGIN PGP MESSAGE----- block, then provide either the recipient private key (for public-key encrypted mail) or the password used for a symmetric gpg --symmetric message. Everything runs locally in WebAssembly, so messages, private keys, and passphrases never leave your browser.

What it handles

Worked example

  1. Paste a complete armored encrypted message in Encrypted message.
  2. Paste the matching armored private key in Your private key.
  3. If the private key is protected, enter its passphrase. For a symmetric message, leave the private key blank and enter the message password instead.
  4. Leave Show the plaintext as set to Auto for normal text messages.

A successful text message returns JSON like:

{
  "plaintext": "attack at dawn",
  "encryption": "public-key",
  "output_format": "text",
  "bytes": 14,
  "binary": false,
  "compressed": false
}

For signed messages, the result also includes a signature object. valid: true means the supplied public key verified the embedded signature; valid: null means the message was signed but no public key was supplied.

Limits and edge cases

FAQ

Do I need a private key, a passphrase, or both?

For a message encrypted to your public key, paste the matching private key. If that private key is protected, enter its passphrase too. For a symmetric gpg --symmetric message, leave the private key blank and enter the message password in the passphrase field.

Can this decrypt binary files?

It can decrypt binary payloads inside an armored OpenPGP message, but the page returns them as text encodings. Use auto to fall back to base64 when bytes are not UTF-8, or choose base64 or hex explicitly. Very large encrypted files are better handled by a desktop OpenPGP client.

Why does it say the private key is not a recipient?

OpenPGP messages are encrypted to one or more recipient key IDs. That error means the pasted private key does not match any recipient session key in the message, or the message uses a hidden recipient and this key still could not unlock it. Check that you pasted the private key for the address or fingerprint the sender used.

Does this verify encrypted signatures automatically?

The tool reports when a decrypted message contains a signature. To actually verify it, paste the signer's public key in the optional public-key field. Without that key, the result marks the signature as present but unverified.

Developer & Automation Access

Run it from the terminal

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

gizza tool pgp-decrypt "Paste the whole ASCII-armored PGP message block here"

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/pgp-decrypt/?message=Paste%20the%20whole%20ASCII-armored%20PGP%20message%20block%20here&private_key=Paste%20your%20ASCII-armored%20private%20key%20block%3B%20leave%20blank%20for%20password-encrypted%20messages&passphrase=Unlocks%20a%20protected%20private%20key%20%E2%80%94%20or%20the%20password%20a%20%27gpg%20--symmetric%27%20message%20was%20made%20with&public_key=Paste%20the%20signer%27s%20ASCII-armored%20public%20key%20block%2C%20or%20leave%20blank%20to%20skip%20verification&output_format=auto

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