Skip to main content

Using Python for GPG/PGP File Encryption - Part 2

Previously we looked at creating keys, importing public and private keys and the overall setup of gnupg with python. This time around, we're going to take a look at file encryption. Overall the file encryption process is fairly general/easy. But it lacks in the area of scaleablilty, ie to start, you'll only be encrypting one file at a time, which can be done outside of Python with ease. The idea of going over everything in Python, is that you can setup a script to encrypt multiple files in a folder (look for that in Part 3).

Assumptions; you have python, and python-gnupg installed, and a public key from someone you want to encrypt and send files to imported to your keystore home (see Part 1 for more information here.

Let's get started with Python file encryption. Start off by getting into your python shell, and enter the following:

>>> import os
>>> import gnupg
>>> gpg_home = "/path/to/keyfile/.gnupg"
>>> gpg = gnupg.GPG(gnupghome=gpg_home)
>>> pub_key = 'fingerprint of public key'
>>> source = "/path/to/file.txt"

OK, let's take a look at what we have so far. We've setup our environment with the keyfile that gnupg is going to use, entered the path and name of the file we're going to encrypt, and told the system what public key to use. Let's keep going:

>>> unenc_file = open(source, "rb")
>>> enc_file = source+".pgp"

Pause. What we have here is that we've opened the file we want encrypted (because that's how pgp works), and we've setup the "pgp" extension for the final encrypted file. Now, you can alternate "pgp" and "gpg". Make sure you and the person you're sending this to know which extension to expect, however both work the same way.

>>> gpg.encrypt_file(unenc_file,pub_key,always_trust=True,output=enc_file)

Now, this line here takes all the variables we've just setup and completes the encryption.

>>> unenc_file.close()
>>> exit()

These last two lines closes the unencrypted file and exits the python shell. You should now have one unencrypted file and on encrypted one.

Now, the only other consideration is if you need to sign the file with your private key. This can be done by simply adding the variable:

>>> sign_key = 'fingerprint of private key'

And changing the GPG encryption line to:

>>> gpg.encrypt_file(unenc_file,pub_key,sign=sign_key,always_trust=True,output=enc_file)

And that's it. You can now encrypt one file at a time with python. Next time on this topic, we'll setup a script to automate the process and encrypt all the files in a specified folder.

Comments

Popular posts from this blog

Visio Stencils Pack for Azure and Microsoft Integration (v5.0.0)

First off, I'd like to send a big shout out to Sandro Pereira who's been managing the vision stencils pack. Essentially, I'm re-posting his information here, because I had a really hard time finding the latest Visio pack for Azure, that wasn't a bunch of SVG's. My thought is that if more people re-post, maybe the search engines of the internet will have an easier time propagating the information... Sandero's Blog (the original post around the new stencils): https://blog.sandro-pereira.com/2019/10/18/microsoft-integration-and-azure-stencils-pack-for-visio-new-major-version-available-v5-0-0/ Sandero's GitHub: https://github.com/sandroasp/Microsoft-Integration-and-Azure-Stencils-Pack-for-Visio Microsoft TechNet Download: https://gallery.technet.microsoft.com/Collection-of-Integration-e6a3f4d0 I will say, and maybe it's just because I'm using Visio 2013, each icon has a boarder that needs to be removed when putting it on the page... Likely it...

Keto Kickin' Choffle

Alight, first recipe on the blog... If you've had a chance to reach the "About" section, you will have seen that, rather than spinning up multiple blogs, I'm just going to combine my passions for tech, food, health, and music into this one space. If you're not a fan, then too bad. I really just don't want to manage more than one blog.... With that, here goes nothing... So I recently came across the choffle. This is a really great, and fast to make replacement for buns. I'm also a huge fan of spicy foods. Well, I got the great idea to combine the heat with the choffle. And let me tell you, it turned out really good. I like to use this for a bun replacement when I'm in the mood for that extra kick, but not the extra toppings. Why? Because the extra toppings are now combined in the choffle. Thus removing the need for the additional toppings on my burgers. Enjoy. Kickin' choffle The choffle mix with a kick! Author: Larry L. Preparation Time: 3...

Replacing rsyslog with syslog-ng on RHEL 6.5

So...I had a piece of monitoring software that didn't play nice with the RHEL default rsyslog for log collection. The software was developed to only work with syslog-ng. I'll be going over the steps that I took, that worked for me, in replacing rsyslog with syslog-ng. I would imagine that these same steps should work for any Linux system similar to RHEL (Fedora, CentOS, etc.). For others (like Debein based distributions), I would need to look into that (coming in a future update to this post). First, remove rsyslog. You will need to keep the dependencies as they will be needed for syslog-ng: sudo rpm -e --nodeps rsyslog Next we will need to add the EPEL repository (more info can be found HERE ): wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm sudo rpm -ivh epel-release-6-8.rpm sudo yum repolist That last command will list all the installed repositories. You are simply verifying that the EPEL package has been installed. Now that we fi...