Введение
Криптография с открытым ключом, также известная как асимметричная криптография, представляет собой метод шифрования, в котором используются два математически связанных ключа, один из которых является закрытым, а другой общедоступным. В этом руководстве показано, как использовать криптографию с открытым ключом для шифрования и расшифровки сообщения в Python.
Шаг 1: Установка необходимых библиотек
Во-первых, вам нужно установить библиотеку «криптографии» Python. Вы можете сделать это с помощью менеджера пакетов pip:
pip install cryptography
Шаг 2: Создание пары ключей
Первым шагом в процессе шифрования является генерация пары ключей (открытого и закрытого).
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
Шаг 3: Сериализация открытого ключа
Открытый ключ может быть передан кому угодно, поэтому его может потребоваться сериализовать в общий формат.
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo,
)
Шаг 4: Шифрование сообщения
Теперь, когда у нас есть открытый ключ, мы можем использовать его для шифрования сообщения.
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
message = b"A secret message"
encrypted = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
Шаг 5: Расшифровка сообщения
Наконец, мы можем использовать закрытый ключ для расшифровки сообщения.
original_message = private_key.decrypt(
encrypted,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(original_message)
Заключение
В заключение можно сказать, что криптография с открытым ключом — это мощный и безопасный метод, обеспечивающий безопасный обмен сообщениями между сторонами. Помните, что закрытый ключ должен храниться в секрете и защищен, а открытый ключ может распространяться свободно.