Cryptography getting started

Martin McBride, 2020-02-22
Tags installing anaconda
Categories cryptography

This article is part of a series on the Python cryptography library.

The cryptography module can be installed using pip, like this:

pip install cryptography

If you use Anaconda, you can also install cryptography in the usual way with conda.

Building the module yourself

Both pip and conda download a pre-built executable from a repository. There is, at least theoretically, a possibility of an attacker hacking the repository and replacing the original executable with their own doctored version, that might contain back doors.

If your application requires a high degree of security, you should consider building the library yourself. Instructions for doing this are included on the official cryptography module website at

Checking the module

You can check that the module is installed correctly using this simple program that creates a key then encodes and decodes a message:

from cryptography.fernet import Fernet

# Generate a key
key = Fernet.generate_key()

# Create a Fernet instance with the key
cipher = Fernet(key)

# Encrypt a message
message = "Message to be encrypted".encode('utf-8')
token = cipher.encrypt(message)

# Decrypt the cipertext
decoded = cipher.decrypt(token)

The line print(token.hex()) should print the encrypted message, something like:


The encrypted data will be different every time, because it contains random elements.

The line print(decoded) prints the result of decrypting the token. It should be:

b'Message to be encrypted'

We will look at this code in more detail in the Fernet encryption section.

If you found this article useful, you might be interested in the book Functional Programming in Python or other books by the same author.


Popular tags

2d arrays abstract data type alignment and animation arc array arrays behavioural pattern bezier curve built-in function callable object chain circle classes close closure cmyk colour combinations comparison operator comprehension context context manager conversion count creational pattern data types design pattern device space dictionary drawing duck typing efficiency ellipse else encryption enumerate fill filter font font style for loop function function composition function plot functools game development generativepy tutorial generator geometry gif gradient greyscale higher order function hsl html image image processing imagesurface immutable object index inner function input installing iter iterable iterator itertools l system lambda function len line linear gradient linspace list list comprehension logical operator lru_cache magic method mandelbrot mandelbrot set map monad mutability named parameter numeric python numpy object open operator optional parameter or partial application path pattern permutations polygon positional parameter print pure function python standard library radial gradient range recipes rectangle recursion reduce repeat rgb rotation scaling sector segment sequence setup shape singleton slice slicing sound spirograph sprite square str stream string stroke structural pattern subpath symmetric encryption template text text metrics tinkerbell fractal transform translation transparency triangle tuple turtle unpacking user space vectorisation webserver website while loop zip