Basic PGP encryption/decryption and keys management

been asked to use pgp to encrypt files before upload them unto remote SFTP server.
So I worte this as a quick reference and notes.
here are some basic pgp commands to get you start to encrypt your files, emails and disk drive.

You can go GPG4Win and download GPG program

1. generate keys

gpg –gen-key

as you can see from the following content, I generate a key “pgptester”
the program will also ask you to provide passphrase password key

C:\Users\chako>gpg --gen-key
gpg (GnuPG) 2.0.30; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: pgptester
Email address: pgptester@gmail.com
Comment:
You selected this USER-ID:
    "pgptester <pgptester@gmail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 5AE84DCA marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: public key of ultimately trusted key 0B40244A not found
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   3  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 3u
pub   2048R/5AE84DCA 2017-11-21
      Key fingerprint = 18C3 8B89 E9B8 7E08 F588  38A1 D86D C5CD 5AE8 4DCA
uid       [ultimate] pgptester <pgptester@gmail.com>
sub   2048R/B0EC6DC0 2017-11-21


C:\Users\chako>

2. List keys

gpg –list-keys

our new keys are list in the table “pgptester”
and “5AE84DCA” is our new public key. We can use the public key to encrypt files and
use private key to decrypt files.

C:\Users\chako>gpg --list-keys
C:/Users/chako/AppData/Roaming/gnupg/pubring.gpg
------------------------------------------------
pub   2048R/27D8D2AE 2017-11-15
uid       [ultimate] xttest <xttest@gmail.com>
sub   2048R/D5CD2620 2017-11-15

pub   2048R/6EC98110 2017-11-15
uid       [ unknown] pgptest@gmail.com

pub   2048R/5AE84DCA 2017-11-21
uid       [ultimate] pgptester <pgptester@gmail.com>
sub   2048R/B0EC6DC0 2017-11-21


C:\Users\chako>

3. encrypt files

# the long version
gpg –encrypt –recipient ‘Your Name’ foo.txt

# using terse options
gpg -e -r Name file.txt

gpg –batch –yes -e -r “public key” –always-trust “file path”

you can see after we encrypt “test_pic.jpg”, the program will create a encrypted file called “test_pic.jpg.gpg”

D:\>dir
 Volume in drive D has no label.
 Volume Serial Number is E0FD-4810

 Directory of D:\

11/19/2017  09:49 PM           108,611 test_pic.jpg
               1 File(s)        108,611 bytes
               0 Dir(s)      90,058,752 bytes free

D:\>gpg --batch --yes -e -r 5AE84DCA --always-trust test_pic.jpg

D:\>dir
 Volume in drive D has no label.
 Volume Serial Number is E0FD-4810

 Directory of D:\

11/19/2017  09:49 PM           108,611 test_pic.jpg
11/20/2017  10:52 PM           108,515 test_pic.jpg.gpg
               2 File(s)        217,126 bytes
               0 Dir(s)      89,948,160 bytes free

D:\>

4. decrypt files

gpg –output decrypted_pic.jpg –decrypt test_pic.jpg.gpg

We have to use private key top decrypt the files and after the decryption we get our test_pic.jpg back. 🙂

D:\>dir
 Volume in drive D has no label.
 Volume Serial Number is E0FD-4810

 Directory of D:\

11/20/2017  10:52 PM           108,515 test_pic.jpg.gpg
               1 File(s)        108,515 bytes
               0 Dir(s)      90,058,752 bytes free

D:\>gpg --output decrypted_pic.jpg --decrypt test_pic.jpg.gpg

You need a passphrase to unlock the secret key for
user: "pgptester <pgptester@gmail.com>"
2048-bit RSA key, ID B0EC6DC0, created 2017-11-21 (main key ID 5AE84DCA)

gpg: encrypted with 2048-bit RSA key, ID B0EC6DC0, created 2017-11-21
      "pgptester <pgptester@gmail.com>"

D:\>dir
 Volume in drive D has no label.
 Volume Serial Number is E0FD-4810

 Directory of D:\

11/20/2017  10:55 PM           108,611 decrypted_pic.jpg
11/20/2017  10:52 PM           108,515 test_pic.jpg.gpg
               2 File(s)        217,126 bytes
               0 Dir(s)      89,948,160 bytes free

D:\>

5. other management

list key

gpg –list-keys

delete key

gpg –delete-key ‘myfriend@his.isp.com’

D:\>gpg --delete-key pgptest@gmail.com
gpg (GnuPG) 2.0.30; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  2048R/6EC98110 2017-11-15 pgptest@gmail.com

Delete this key from the keyring? (y/N) y

D:\>

import key

gpg –import key.asc

D:\>gpg --import testkey.asc
gpg: key 6EC98110: public key "pgptest@gmail.com" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

D:\>

export keys

gpg –export-secret-keys -a keyid > my_private_key.asc
gpg –export -a keyid > my_public_key.asc

gpg –export -a 5AE84DCA > pub.asc

GnuPG Data Location
C:\Users\{Your User Name}\AppData\Roaming\GnuPG