Как да шифровате и дешифрирате данни в Python с помощта на криптографска библиотека

В този урок ще научите как да шифровате и дешифрирате данни, напр. низ от текст, използващ криптографската библиотека в Python.

Шифроването е процес на кодиране на информация по такъв начин, че само упълномощени страни да имат достъп до нея. Позволява ни да защитим сигурно данните, които не искаме никой да вижда или да има достъп.

Свързани:


В този пример ще използваме симетрично криптиране, което означава, че същият ключ, който използвахме за криптиране на данни, също може да се използва за дешифриране.

Библиотеката за криптография, която използваме тук, е изградена върху алгоритъма AES.




Шифроване на данни в Python

Първо, трябва да инсталираме криптографската библиотека:

pip3 install cryptography

От криптографската библиотека трябва да импортираме Fernet и започнете да генерирате ключ - този ключ е необходим за симетрично криптиране / декриптиране.

Генериране на ключ

За да генерираме ключ, извикваме generate_key() метод:

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():
'''
Loads the key named `secret.key` from the current directory.
'''
return open('secret.key', 'rb').read()

Шифроване на съобщение

Сега сме готови да шифроваме съобщение. Това е процес от три стъпки:

  • 1 - кодиране на съобщението
  • 2 - инициализиране на клас Fernet
  • 3 - предайте кодираното съобщение на encrypt() метод

кодиране на съобщението:

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

инициализирайте клас Fernet:


f = Fernet(key)

криптиране на съобщението:

encrypted_message = f.encrypt(message)

Пример за пълен код

По-долу е даден пълен работещ пример за криптиране на съобщение в python:

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')

Изход:

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

Дешифриране на данни в Python

За да дешифрираме съобщението, просто извикваме decrypt() метод от Fernet библиотека. Не забравяйте, че трябва да заредим и ключа, тъй като той е необходим за дешифриране на съобщението.


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=')

Изход:

encrypt this message