How do I encrypt and decrypt a string in python?
How do I encrypt and decrypt a string in python?
Question by David
I have been looking for sometime on how to encrypt and decrypt a string. But most of it is in 2.7 and anything that is using 3.2 is not letting me print it or add it to a string.
So what I’m trying to do is the following:
mystring = "Hello stackoverflow!"
encoded = encode(mystring,"password")
print(encoded)
jgAKLJK34t3g (a bunch of random letters)
decoded = decode(encoded,"password")
print(decoded)
Hello stackoverflow!
Is there anyway of doing this, using python 3.X and when the string is encoded it’s still a string, not any other variable type.
Answer by Milovan Tomašević
Encrypt Data
First, we need to install the cryptography library:
pip3 install cryptography
-
From the cryptography library, we need to import
Fernet
and start generating a key - this key is required for symmetric encryption/decryption. - To generate a key, we call the
generate_key()
method.- We only need to execute the above method once to generate a key.
You need to keep this key in a safe place. If you lose the key, you won’t be able to decrypt the data that was encrypted with this key.
- We only need to execute the above method once to generate a key.
- Once we have generated a key, we need to load the key with
load_key()
Encrypt a Message
This is a three step process:
- encode the message
- initialize the Fernet class
- pass the encoded message to
encrypt()
method
Below is a full working example of encrypting a message :
from cryptography.fernet import Fernet
def generate_key():
"""
Generates a key and save it into a file
"""
key = Fernet.generate_key()
with open("secret.key", "wb") as key_file:
key_file.write(key)
def load_key():
"""
Load the previously generated key
"""
return open("secret.key", "rb").read()
def encrypt_message(message):
"""
Encrypts a message
"""
key = load_key()
encoded_message = message.encode()
f = Fernet(key)
encrypted_message = f.encrypt(encoded_message)
print(encrypted_message)
if __name__ == "__main__":
# generate_key() # execute only once
encrypt_message("Hello stackoverflow!")
output:
b'gAAAAABgLX7Zj-kn-We2BI_c9NQhEtfJEnHUVhVqtiqjkDi5dgJafj-_8QUDyeNS2zsJTdBWg6SntRJOjOM1U5mIxxsGny7IEGqpVVdHwheTnwzSBlgpb80='
Decrypt Data
To decrypt the message, we just call the decrypt()
method from the Fernet
library. Remember, we also need to load the key as well, because the key is needed to decrypt the message.
from cryptography.fernet import Fernet
def load_key():
"""
Load the previously generated key
"""
return open("secret.key", "rb").read()
def decrypt_message(encrypted_message):
"""
Decrypts an encrypted message
"""
key = load_key()
f = Fernet(key)
decrypted_message = f.decrypt(encrypted_message)
print(decrypted_message.decode())
if __name__ == "__main__":
decrypt_message(b'gAAAAABgLX7Zj-kn-We2BI_c9NQhEtfJEnHUVhVqtiqjkDi5dgJafj-_8QUDyeNS2zsJTdBWg6SntRJOjOM1U5mIxxsGny7IEGqpVVdHwheTnwzSBlgpb80=')
output:
Hello stackoverflow!
Your password is in the secret.key
in a form similar to the password below:
B8wtXqwBA_zb2Iaz5pW8CIQIwGSYSFoBiLsVz-vTqzw=
Share on: