Как зашифровать и расшифровать данные в 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