Kako šifrirati i dešifrirati podatke u Pythonu pomoću biblioteke kriptografije

U ovom uputstvu naučit ćete kako šifrirati i dešifrirati podatke, npr. niz teksta pomoću biblioteke kriptografije u Pythonu.

Šifriranje je postupak kodiranja podataka na takav način da im mogu pristupiti samo ovlaštene strane. Omogućuje nam sigurnu zaštitu podataka koje ne želimo da bilo tko vidi ili im pristupi.

Povezano:

U ovom ćemo primjeru koristiti simetričnu šifriranje, što znači da je isti ključ koji smo koristili za šifriranje podataka također koristan za dešifriranje.

Biblioteka kriptografije koju ovdje koristimo izgrađena je na vrhu algoritma AES.

Šifriranje podataka u Pythonu

Prvo, moramo instalirati kriptografsku biblioteku:



pip3 install cryptography

Iz biblioteke kriptografije trebamo uvesti Fernet i započnite s generiranjem ključa - ovaj je ključ potreban za simetrično šifriranje / dešifriranje.

Generiraj ključ

Da bismo generirali ključ, nazivamo generate_key() metoda:

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)

Gore navedenu metodu trebamo izvršiti samo jednom kako bismo generirali ključ.

Bilješka:Ovaj ključ morate čuvati na sigurnom mjestu. Ako izgubite ključ, nećete moći dešifrirati podatke koji su šifrirani ovim ključem.

Stavite ključ

Nakon što generiramo ključ, moramo učitati ključ u našu metodu kako bismo šifrirali podatke:

def load_key():
'''
Loads the key named `secret.key` from the current directory.
'''
return open('secret.key', 'rb').read()

Šifriranje poruke

Sada smo spremni za šifriranje poruke. Ovo je postupak u tri koraka:

  • 1 - kodiranje poruke
  • 2 - inicijalizacija klase Fernet
  • 3 - proslijedite kodiranu poruku na encrypt() metoda

kodiraj poruku:

message = 'message I want to encrypt'.encode()

inicijalizirajte klasu Fernet:

f = Fernet(key)

šifriraj poruku:

encrypted_message = f.encrypt(message)

Primjer punog koda

Ispod je cjelovit radni primjer šifriranja poruke u pythonu:

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__':
encrypt_message('encrypt this message')

Izlaz:

b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4='

Dešifriraj podatke u Pythonu

Da bismo dešifrirali poruku, samo pozivamo decrypt() metoda iz Fernet knjižnica. Zapamtite, također moramo učitati i ključ, jer je ključ potreban za dešifriranje poruke.

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'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=')

Izlaz:

encrypt this message