Pretty Good Privacy (PGP) is an encryption program that provides cryptographic privacy and authentication for data communication. PGP is used for signing, encrypting, and decrypting texts, e-mails, files, directories, and whole disk partitions and to increase the security of e-mail communications. Phil Zimmermann developed PGP in 1991.

PGP encryption uses a serial combination of hashing, data compression, symmetric-key cryptography, and finally public-key cryptography; each step uses one of several supported algorithms. Each public key is bound to a username or an e-mail address. The first version of this system was generally known as a web of trust to contrast with the X.509 system, which uses a hierarchical approach based on certificate authority and which was added to PGP implementations later. Current versions of PGP encryption include both options through an automated key management server.

The encryption and decryption processes First, a quick word about keys. Public and private keys play a vital role in PGP to encrypt and decrypt the data. Generally, a public key is used to encrypt the data and is always shared with the end users. The private key is used to decrypt the data and it is never shared with anyone.

Now, the following diagrams show the encryption and decryption processes:

1 Keys generation

To start using PGP you need to create keys. Key generation requires:

  • Identity to identify the key
  • A passphrase to protect your secret key.

Copy
<script>
    var pgpkeys = new Ax.crypt.PGPKeyGen("deister", "secret");
    console.log(pgpkeys.getPublicKey());
    console.log(pgpkeys.getPrivateKey());
</script>
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: BCPG v1.59

lQHpBFyrJ2URBACOpjjSSWNIcCw21w7f1KxZxrPR4MAeU6wn69IzwNvgISO8Yh4V
RvpitU407LFtECVW0GRJaQvBCNkxIKdq3o7UqNnFJYyAgE7XnBGru3ceSnX8ZqyT
h9Bnc/TfrbSjR5XiN1CVNAHvXLuBkciL38vEpt4FIFmNcbhn5pX5DgectQCgs+aF
pRYQVJHj5eo1oVBBN++paCUD/0QVDzzJXHBxhGGCULt7cTTPkY/r0wH4WfXBMkIo
gmYPtifOlUecp2lxI/9ZXE71POqap2uaqld02/2uYmskIsdwqbUSiZXc7bRZPvlC
AoQSlwlnaiAt0YUyPzkazti8ttJlZC7kh2Zt6VWamLqkvSoBZILf7WI8eZBQoGXO
N9UEA/9kJ6icHSFatsnn2+bX2jVvE8ppyUzq8HXNco2IxYLcvHxCjMF9UbQH2ESF
naESx//GvUrnHUdmGnsJmRpAu5qs6gLujt5y4kgjqQRScbBMtWnGRyz9ZQpuUzFJ
xzJ7KWEm9Ea1rKV8sEmwIH0vLnbrTHn90NWLkO5ojWDG0crLvf4JAwIJ2xx5UURE
82CGgKpiayUCh15XuP1+P9H5L2OeD3WXj2K7OafLNlM5tbcQ44PV4uC+nXWqvyob
y6pGOJK+I0Um19hutAdkZWlzdGVyiEYEExECAAYFAlyrJ2UACgkQr5AJ522X4iZa
+gCbBfY0F+RQLwgf5gb8CmIddn3gtLEAn3LIiCxcjP1TdJW8o9+ebQQ4b6zYnQZA
BFyrJ2UQEAD//////////8kP2qIhaMI0xMZii4DcHNEpAk4IimfMdAILvqY7E5si
UUoIeY40BN3vlRmzzTpDGzArCm3yXxQ3T+E1bW1RwkXkhbV2Yl5+xvRMQummN+1r
C/9ctvQGt+3uOGv7Womfpa6fJBF8Sx/mSShmUezkWz3CAHy4oWO/BZjaSDYcVdOa
aRY/qP0kz1+DZV0j3KOtlhxi81YghVK7ntUpB3CWlm1nDDVOSryYBPF0bAjKGCF8
MpBeRi42zjvjnncsGA6GA5sng6LsB6KPtcVd8G9MUsneK8v2lVgXGDmVSXzqlWrl
FdImGJj6BRAVco5aiqrELa0zFw0EUHozqFUhq98cumTs+4UEWNvvCorqcVddBgx9
s5cPhabh5Mer9a6M2wkz1x6MlOBKJWGdzuPSJhrS7mvxL/oG2YoIZNh2AnM+yGpk
Uh8rGBd7IAy74RdXemFdbHcJiMC62UbiCOJPoHTlqzFD21v84P0QjkuC0SCpIQgB
GnI8EqeH5teIcZoQvbpbJpnDJxhq9OI8GpRoNLYVC9olg+nKKtRM6Nu7wtsE3o75
Lo78FB++yqYofFlHTmvAXZmylk+gkMOiIzuhhlFb5+0fYSlwzuLXr7gb3XYhcEgc
0AaRJ9WwWqmTtOqYjY/dwYb/t9yQpsCPTfQ1yTQGMZn//////////wACAg//U0Qr
kqJsDq8FtitwY9okR/veoih3wxRD/sCecTuTUpaByCorRui96xU2orZsIy50S/oh
eMlvzKfErXU9YX4WH0Ae3xe8uCYIQui5iV1+8/LZiwgMGeNDqT64lunyOawMxcU4
43yI+pRR+yuuM1GGLmOniiq3bAkPEZZwmay27QThPV70nI7qgsN9gOFT07CpdYfe
a3QDpP0n24v9Lx1Fto6O9euZ+vlMs2kFfMBxHTKLn0SGqnIYxTyv22DmvWIWgEg4
JVm0BFKQRKFh1Gbayo1Cmb6xa1OlxKvbnm0P9EKPCY072cC5RZ12jaXcgrzpZiBE
B+fyE6UY56FLbWRD1U3FbElKS5uttPBdborAjFXUyZaPVIumNSz3QFqvJItDay7C
sYLtcWoN6U2ARJvCa/0ysdJJ/VUso5LzgSq/htTt8MQTlodcKabZb1/TbJuqsjl5
VckNl1jr7Qc9iTL1J8HAeAAi/kS38FV2Jbap2LOLvyAAjsXQpHmOWfDxrqqMJgUj
NzciW/IiaEox3HuqzojJft1rcpAcsdgErgeJo93Ly+Saw7zmxu37orx5kxiQLdRy
eASY1bPrZFGJ9X7YPLgFlftbImZEySF6tUD9dheP0vkYKpmNpT7nxg1l6/1zxSEf
p0TMSew6rf9joD3mUiRsqS8dA/CLOLpyZlrtvYf+CQMCCdsceVFERPNgLmlCTyhn
yHa8QigOHkT1zaa3qgjBQmu1KqBWmE4pKMs1eP/LuynZrekSBekOs/Woe7s4+CA9
XEzgRXaykI+k+X84EPcuhlr2V8v9FuHKXB6FBRDIUSvSosm/4CXIkFo7etCikjZe
A82sNodTh1rnRxTRMwcAZ3s6cbrPbVbwpbBkhTvNsIp/6W0YVwW1hr2OarhPM7sX
zEmsXcMDXfpjqhccUItp8774+9OVA6cqOSBbhl7ZL6EJoSkaDK+qkB4R0EyxJCzW
zJ56FADxURA2CBOpYGPquOs8OHmRsTr4s0yFHAeAGHKmcXgAEUJrIZPQ07BLLtsA
IcIexULF8UiS4qSE4g/Vd7xtkGlzH421Gbu5n7abmRHIot1psyxxpSfQfZiKWrO2
25y49imrkNLsrdLoOSauCGS4JlIS33PnLqsThsmydocQ0C4uxQIyyXx/1OVUms6L
G7BV8Dm0OPylettGZn4M4DEGR2YlE4TX6CdBG4e7Iy1MqS8WFeOb8vYaW4SbcZhs
/Cx4/SDOPxEgRkCYd9BsqfZQCXHrM87rZKmRzLpAz6sh9hjeEvNNFrJHKwKNbHC6
+NUGIc1tEwUCUtf+wWhPzz4Nzi542q371ZUUb7Uqrv9rAmenOaHkrXoClCJxZFrB
Dq53DhJBuvDFm0DpGKxT65JLjb8/BKHGnFqolmw7uy6uTUu9eDskuvk0zNeQZWFH
/ue+jFQz3Zb2j5tUiuXCcYhGBBgRAgAGBQJcqydlAAoJEK+QCedtl+ImzYkAniZu
fKPZ8alAbuj17mcUbD9EkyLOAJ9Oahl0h6gb9rRTJnuuFendkiYBFQ==
=fIXW
-----END PGP PRIVATE KEY BLOCK-----

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.59

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
=68q1
-----END PGP PUBLIC KEY BLOCK-----

Keys are generated using DSA and ElGamal.

2 Encode a payload

You can encode a payload into an encoded PGP message using the Private Key. To use the Private Key, you neeed to provide it's password (used during generation). Payload can be any input stream convertible object.

Copy
<script>
    // Load private key (in this example from string literal)
    
    var privateKey = `
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: BCPG v1.59

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
=fIXW
-----END PGP PRIVATE KEY BLOCK-----
`;


    var pgpencoder = new Ax.crypt.PGPEncode(privateKey);
    console.log(pgpencoder.encode("secret", "Hello world"));
</script>
-----BEGIN PGP MESSAGE-----
Version: BCPG v1.59

owJ4nJvAy8zAJbh+Aufz3OmP1BhPKyYJpGXmpPol5qbqeqbn5RelpsSs1tD1SM3J
yVcozy/KSenwZ2EQ5GLgZ2UCSXDIpKRmFpekFjFwcQrAjHFoZJgr9NTQbQ3fyZec
WVqPrqzQWFKwwtiAYTabsMT1VVXz9R7uePr4+vMlAtMeStoCAJXDMYw=
=93AL
-----END PGP MESSAGE-----

3 Decode a PGP message

To decode a PGP message we will need the Public Key.

Copy
<script>
    // Load public key (in this example from string literal)
    
    var publicKey = `
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.59

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
=68q1
-----END PGP PUBLIC KEY BLOCK-----
`;
var pgpmessage = `
-----BEGIN PGP MESSAGE-----
Version: BCPG v1.59

owJ4nJvAy8zAJbh+Aufz3OmP1BhPKyYJpGXmpPol5qbqeqbn5RelpsSs1tD1SM3J
yVcozy/KSenwZ2EQ5GLgZ2UCSXDIpKRmFpekFjFwcQrAjHFoZJgr9NTQbQ3fyZec
WVqPrqzQWFKwwtiAYTabsMT1VVXz9R7uePr4+vMlAtMeStoCAJXDMYw=
=93AL
-----END PGP MESSAGE-----
`;

    var pgpdecoder = new Ax.crypt.PGPDecode(publicKey);
    var msgbytes   = pgpdecoder.decode(pgpmessage);
    console.log(msgbytes);
    console.log("---")
    console.log(new Ax.lang.String(msgbytes));
    console.log("---")
</script>
00000000 48 65 6C 6C 6F 20 77 6F 72 6C 64                Hello world

---
Hello world
---