Home › Developer Tools › PGP Encrypt / Decrypt

PGP Encrypt / Decrypt

Encrypt a message or file with someone's PGP public key, decrypt messages sent to you with your private key, and create or check signatures. Paste ASCII-armored keys from GnuPG, Kleopatra, Proton or any OpenPGP app. Everything runs in your browser with OpenPGP.js; keys and messages are never uploaded.

Last updated:

Loading OpenPGP.js…

Public key(s)

Recipient's key to encrypt, or sender's key to verify. Several keys allowed.

Your private key

Needed to decrypt and to sign. Stays on this page.

Advertisement
Advertisement

How to use the PGP Encrypt / Decrypt

  1. Paste the public key of the person you are writing to (or the sender, to verify a signature). You can paste several keys.
  2. Paste your private key and its passphrase if you want to decrypt or sign. It stays on this page and is never uploaded.
  3. Pick a tab: Encrypt, Decrypt, Sign or Verify, and paste or type the message (or open a file).
  4. Press the action button. The result appears below with a signature check where relevant.
  5. Copy or download the result. No keys yet? Press Use a test key pair, or create real keys with the PGP Key Generator.

Which key does what?

TaskKey neededWhose keyResult
EncryptPublic keyThe recipient's-----BEGIN PGP MESSAGE----- that only the recipient can open
DecryptPrivate key + passphraseYoursThe original text or file
SignPrivate key + passphraseYoursA signed message or detached signature
VerifyPublic keyThe signer'sValid / invalid, and who signed

Encrypt-and-sign combines both: the message is signed with your private key first and then encrypted to the recipient's public key, so they can check it came from you. When you decrypt such a message here, paste the sender's public key too and the signature is verified automatically.

How PGP encryption works

OpenPGP (RFC 4880) uses hybrid encryption. A random one-time session key encrypts the message with a fast symmetric cipher (AES-256 by default in OpenPGP.js), and that session key is then encrypted to each recipient's public key with RSA or elliptic-curve Diffie-Hellman (X25519, NIST P-curves). The message also carries an integrity check (MDC), so any tampering makes decryption fail. Adding several recipients only adds one small encrypted session key per recipient.

Password-based messages work the same way, except the session key is derived from your password with an iterated, salted S2K function. Anyone with the password can decrypt, so share it over a different channel than the message.

Same operations in GnuPG

# encrypt (and sign) for a recipient, ASCII-armored
gpg --armor --encrypt --sign --recipient [email protected] message.txt

# decrypt and verify
gpg --decrypt message.txt.asc

# cleartext signature and verification
gpg --clearsign message.txt
gpg --verify message.txt.asc

# detached signature for a file
gpg --armor --detach-sign report.pdf
gpg --verify report.pdf.asc report.pdf

# password (symmetric) encryption
gpg --armor --symmetric message.txt

Frequently asked questions

Which key do I use to encrypt and which to decrypt?

Encrypt with the recipient's public key; only their private key can decrypt the result. To read a message someone sent you, decrypt it with your own private key and passphrase. Signing works the other way around: you sign with your private key and others verify with your public key.

Is it safe to paste my private key into a website?

This page runs the open-source OpenPGP.js library locally: your keys, passphrase and messages are processed in your browser's memory and never sent to a server or stored. Still, only paste private keys into tools you trust, and for long-term secrets prefer local software such as GnuPG. A test key pair button is provided for trying the tool safely.

Can I read a message I encrypted myself?

Only if you encrypted it to your own key too. Tick 'Also encrypt to my own key' in the Encrypt tab when your private key is filled in, and you will be able to decrypt the message later.

Why does it say the message was not encrypted for my key?

The message was encrypted to a different public key, for example an old key of yours or another recipient's. Check the key IDs: the recipient key ID inside the message must match one of your key's subkeys. Messages encrypted with a password instead of a key need the password field.

What is the difference between a cleartext and a detached signature?

A cleartext signature keeps the message readable and wraps it between BEGIN PGP SIGNED MESSAGE and a signature block, which is handy for email and forums. A detached signature is a separate block, used to sign files or text that must stay unchanged; to verify, you need both the original text and the signature.

Is this compatible with GnuPG?

Yes. OpenPGP.js implements RFC 4880, so messages encrypted here decrypt with gpg --decrypt, and messages from gpg --armor --encrypt or Kleopatra decrypt here. Binary .gpg files can be opened in the Decrypt tab.

Is there a size limit?

Text and files up to about 25 MB work well; everything happens in your browser's memory, so very large files are better handled with GnuPG on your computer.

Are all the tools on FreeToolCabin tested for quality and accuracy?

Yes! Every tool on our site undergoes automated Q/A testing in real browser environments to ensure high precision, correct output, and zero errors. If you happen to spot a bug or have a suggestion, please contact us at [email protected] and our team will review it right away.

Related tools

PGP Key GeneratorGenerate an OpenPGP key pair (Curve25519, NIST ECC or RSA) with passphrase and expiry, offline.Text Encryption ToolEncrypt and decrypt text with a password using AES-256-GCM, entirely in your browser.RSA Key GeneratorGenerate 2048, 3072 or 4096-bit RSA key pairs as PEM, PKCS#1, JWK or OpenSSH, locally.Hash GeneratorGenerate MD5, SHA-1, SHA-256 and SHA-512 hashes of text or files.RSA Encryption ToolEncrypt text with an RSA public key and decrypt it with the private key using RSA-OAEP in your browser.Password GeneratorCreate strong passwords and passphrases.MD5 Hash GeneratorGenerate MD5 hashes of text, lines or files and verify checksums.SHA-256 Hash GeneratorSHA-256 and HMAC-SHA256 hashes of text, lines or files, in hex or Base64.Base64 Encoder DecoderEncode or decode Base64 text and files, and make data URIs.URL Encoder DecoderPercent-encode or decode URLs, query strings and form data.HTML Entity Encoder / DecoderEscape and unescape HTML entities, named or numeric.Bcrypt Hash Generator & CheckerCreate bcrypt password hashes and check a password against a hash.Binary TranslatorConvert text to binary, hex, octal and back.HMAC GeneratorGenerate and verify HMAC signatures with SHA-256, SHA-512, SHA-1 or MD5.CRC32 Checksum CalculatorCalculate CRC-32, CRC-32C, CRC-16 and Adler-32 checksums of text or large files.JWT DecoderDecode JSON Web Tokens, read the claims and expiry, and verify HS256 signatures.JWT GeneratorCreate and sign HS256, HS384 or HS512 JSON Web Tokens in your browser and verify them.Password Strength CheckerSee how strong a password really is, how long it takes to crack and how to improve it.Caesar CipherEncode and decode Caesar shift ciphers and crack unknown shifts with a ranked brute force.Vigenère CipherEncrypt and decrypt Vigenère and Autokey ciphers, and crack unknown keys with frequency analysis.Atbash CipherEncode and decode Atbash ciphers (A↔Z, B↔Y) in Latin or Hebrew, with a live letter mapping table.ASCII TableFull ASCII code chart 0–255 in decimal, hex, octal, binary and HTML, with search and copy.Unicode Character LookupFind Unicode characters by name or code point and copy them with UTF-8, HTML and code escapes.Punycode ConverterConvert international domain names, emails and URLs between Unicode and xn-- Punycode, in bulk.JSON Escape / UnescapeEscape text for a JSON string, unescape \n and \" back to text, or stringify a whole object.Binary to HexConvert binary to hex instantly with steps and signed mode.Hex to BinaryConvert hex to binary instantly with steps and signed mode.Binary CalculatorAdd, subtract, multiply, divide, AND, OR, XOR and shift binary numbers with decimal values.Hex CalculatorHexadecimal + − × ÷ and AND, OR, XOR, NOT, shifts with decimal and binary equivalents.Base32 Encoder / DecoderEncode and decode Base32 (RFC 4648), Base32hex, Crockford and z-base-32 from text, hex or files.Base58 Encoder / DecoderEncode and decode Base58 and Base58Check (Bitcoin alphabet) from text or hex, with checksum verification.Unicode Escape / UnescapeConvert text to \uXXXX, \u{...}, \x, &#...; or CSS escapes and decode them back.File Hash CheckerGet MD5, SHA-1, SHA-256 and SHA-512 checksums of files and verify them against a hash.TOTP GeneratorGenerate 2FA one-time codes from a secret key, create otpauth QR codes and verify codes.SSL Certificate DecoderDecode PEM SSL/X.509 certificates: subject, issuer, expiry, SANs, key and fingerprints.Argon2 Hash GeneratorHash passwords with Argon2id, Argon2i or Argon2d and verify them against an encoded hash.Base64 to PDFDecode a Base64 string to a PDF with preview and download, or encode a PDF to Base64.Bitwise CalculatorCalculate AND, OR, XOR, NOT and bit shifts at 8–64 bits with a bit grid and all bases.Base64 to FileDecode Base64 or a data URI to a downloadable file; detects the real file type and previews it.File Encryption ToolEncrypt and decrypt any file with a password using AES-256-GCM, entirely in your browser.Passphrase GeneratorMake strong, memorable diceware passphrases from a 7,776-word list, with entropy in bits.CSR DecoderDecode a PEM certificate signing request: subject, SANs, key size, signature and CA readiness checks.Enigma Machine SimulatorEncrypt and decrypt with a virtual Enigma I, M3 or M4: rotors, rings, plugboard and lampboard.Hex Opacity CalculatorConvert opacity percent to a 2-digit HEX alpha code and full #RRGGBBAA color, with a 0-100% table.Playfair CipherEncrypt and decrypt Playfair ciphers from a keyword, with the 5x5 key square and every digraph step.Pwned Password CheckerCheck if a password appeared in data breaches; only 5 characters of its SHA-1 hash are sent.SAML DecoderDecode SAMLRequest and SAMLResponse messages to readable XML, attributes and validity times.SSL Certificate ConverterConvert SSL certificates and keys between PEM, DER, PFX/P12 and P7B in your browser.Checksum CalculatorCompute 8-bit sum, two's complement LRC, XOR/BCC, NMEA, Fletcher and Internet checksums of bytes.PBKDF2 Hash GeneratorDerive PBKDF2 keys from a password, salt and iteration count with SHA-1, SHA-256 or SHA-512.Protobuf DecoderDecode raw Protocol Buffers hex or Base64 without a schema, or add a .proto for field names.XML Escape / UnescapeEscape & < > " ' for XML text and attributes, unescape entities back, or wrap text in CDATA.Binary Search Tree VisualizerInsert, delete and find in BST, AVL and red-black trees with animated rotations and traversals.CSR GeneratorCreate a certificate signing request (CSR) and private key with SANs, RSA or ECDSA, in your browser.MongoDB ObjectId to TimestampDecode a MongoDB ObjectId to its creation date, or build ObjectIds from dates for range queries.Quoted-Printable Encoder / DecoderEncode or decode quoted-printable email text (MIME) with UTF-8 and 76-character soft line breaks.Self-Signed Certificate GeneratorCreate a self-signed SSL certificate and key for localhost or dev servers, as PEM or PFX.SHA-1 Hash GeneratorSHA-1 and HMAC-SHA1 of text or files in hex or Base64, plus Git blob hashes and verify.SHA-512 Hash GeneratorSHA-512 and SHA-384 hashes of text or files in hex or Base64, HMAC and hash verification.SRI Hash GeneratorCreate Subresource Integrity hashes (sha256/384/512) and ready <script> or <link> tags.SSH Key GeneratorGenerate Ed25519 or RSA SSH key pairs in your browser: OpenSSH public key plus private key.String Escape / UnescapeEscape or unescape strings for JavaScript, Java, C#, Python, C, SQL, regex, CSV and shell.UTF-8 Encoder / DecoderConvert text to UTF-8 bytes in hex, decimal, binary, \x or % and decode bytes back to text.UUID Decoder & ValidatorDecode any UUID: version, variant, v1/v6/v7 timestamp and MAC node, plus bulk validation.
See all 65 Encoders, Hashes & Crypto →