Encryption Protection with Python Fernet

Protecting data using Python

Background

I needed to store email addresses and preferences in a database. To avoid a Facebook situation in which plaintext data could lead to a lot of panic, the least you can do is encrypt the data when storing it, and using the simple way of decoding it. All of this can be done with Python's Fernet library.

Necessary import

from cryptography.fernet import Fernet

Generate secret key to be used

def generate_key():
    """
    Generate key and save to file for DynamoDB email table
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb")  as key_file:
        key_file.write(key)

Meat of necessary code, includes encryption and decryption

def load_key():
    return open("secret.key", "rb").read()

def encrypt_text(text):
    key = load_key()
    f = Fernet(key)
    return f.encrypt(bytes(text, "utf-8"))

def decrypt_text(encrypted_text):
    key = load_key()
    f = Fernet(key)
    decoded = f.decrypt(encrypted_text)
    return decoded.decode("utf-8")

def test_security(test):
    """
    >>> test_security("hello@test.com")
    'hello@test.com'
    """
    encoded = encrypt_text(test)
    decoded = decrypt_text(encoded)
    return decoded

if __name__ == "__main__":
    import doctest
    doctest.testmod()