Avatar

Encrypt/Decrypt using GPG

To encrypt a string using GPG with a specific public key,

  1. Import the Public key.
$ gpg --import <filename>
  1. Get the fingerprint of the public key. The fingerprint is a 40 character hexadecimal string.
$ gpg --list-keys
...
pub   rsa3072 2021-05-20 [SCE]
      ABCDEFABCDEF1234567890ABCDEFABCDEFABCDEF
uid           [ <trust>] Key ID <email>
...

Note: If the value in the square brackets in the pub line has an E, then the key has the capability to encrypt/decrypt.

  1. Encrypt the string
$ echo "<text>" | gpg --encrypt --armor -r <KEY>

Example:

$ echo "test" | gpg --encrypt --armor -r ABCDEFABCDEF1234567890ABCDEFABCDEFABCDEF
-----BEGIN PGP MESSAGE-----

A7IMA5GvcRINKNEzAQ/8CAzCFmmGjaYXcpTjT0DIr+3kYdDzNHWC+p/yEKvZZrb4
9roPjDCrEbwEL5tEWjnuTExgcxRt5vI1CdeTlw0A1HNItjVNg0GewLc7gyza12od
0WybKs2mtdnAiB4eK9kd1dnOKrz60TLqjEN0Qdlpz8G4j3eeOWXdlBphMqWJd0g1
gBajMQ3siwI7JdPy+zGlOS7Q9d4RUkF4L7chxFlZ4v2CXq3BI4XDt55nQWvjKytL
08G+PWBEO+xQG1MtQjPrfWYBrs3ErI0zcfDNFE51FH6yFn2jcUJLMUs0zSjVj2cr
Y7OG7YfbaKyzXruk4MDB8m7sS59paTkwvPB5eg/I1U1MprtR3fwyCSlxDL7+lxi8
eFCEK5AU1L7yJ+xqJnpyo2rKR5ueG5lpXjUMwdUei+evhy5majol1oMw4/sDo87g
7uxBeS63l2IWPMz23us5L94pABUZzJ/l/Fq0rA4H351ByndnCl/5NWZcZM2wdLQV
HxfuSIdXrWX8IHge2LgmnYSFO3bcQCz+1K0VF4zhVbgBs4uy+Ntc6S9q4KAU3UrA
VcTeWiSCQXgpDujTlKoz9XdAx2kwHheqI1MoC7Lk0pLc9fkmzoD2VWm7qPCq5WNC
o/0+5O8P5bl4zJZVY+2YUlGKYsj4asRbZxYK57/t80YoU5uBg8B2epQJXI9WhyvS
QAF7RUrgdWj9ef79K7AGkZXaM9TZbn5OZHm55G3T9MJDNk44lpOVfOy5AZJi8H7q
/1Fx7/JkBdMhxM+JAJGC0P0=
=NFRx
-----END PGP MESSAGE-----
  1. Now this string can be sent to the recipient.

  2. The recipient who possesses the private key counterpart of the public key, can decrypt the message if the private key is in the keyring. Assuming the contents of the encrypted value is in a file called enc, you can use the following to decrypt.

cat enc | gpg --decrypt
gpg: encrypted with 4096-bit RSA key, ID ABCDEFABCDEF1234, created 2022-12-05
      "Key ID <email>"
test