В этом руководстве вы узнаете, как зашифровать и расшифровать данные, например строка текста с использованием библиотеки криптографии в Python.
Шифрование - это процесс кодирования информации таким образом, что только авторизованные стороны могут получить к ней доступ. Это позволяет нам надежно защищать данные, которые мы не хотим, чтобы кто-либо видел или к которым имел доступ.
Связанный:
В этом примере мы будем использовать симметричное шифрование, что означает, что тот же ключ, который мы использовали для шифрования данных, также можно использовать для дешифрования.
Библиотека криптографии, которую мы здесь используем, построена на основе алгоритма AES.
Для начала нам нужно установить библиотеку криптографии:
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()
Теперь мы готовы зашифровать сообщение. Это трехэтапный процесс:
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='
Чтобы расшифровать сообщение, мы просто вызываем 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