Шифрование RSA в PYTHON. Как изначально генерировать публичный ключ, а на другом устройстве имея публичный генерировать приватный? Необходимо генерировать публичный ключ по нему шифровать информацию и после этого на другое устройство отправлять публичный ключ и по публичному ключу генерировать приватный и расшифровывать текст

21 Авг 2019 в 07:11
178 +1
0
Ответы
1

Для реализации шифрования RSA в Python и генерации публичного и приватного ключей необходимо использовать модуль cryptography.

Пример кода для генерации публичного и приватного ключей и шифрования/дешифрования данных с их использованием:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# Генерация публичного и приватного ключей
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# Сериализация и сохранение публичного ключа
public_key_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open("public_key.pem", "wb") as f:
f.write(public_key_pem)
# Шифрование данных с использованием публичного ключа
message = b"Hello, world!"
encrypted_message = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Дешифрование данных с использованием приватного ключа
decrypted_message = private_key.decrypt(
encrypted_message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(decrypted_message.decode())

Для передачи публичного ключа на другое устройство можно отправить файл public_key.pem, а на другом устройстве загрузить этот файл и преобразовать его обратно в объект публичного ключа:

# Загрузка публичного ключа с другого устройства
with open("public_key.pem", "rb") as f:
public_key_pem = f.read()
public_key = serialization.load_pem_public_key(
public_key_pem,
backend=default_backend()
)

С помощью этого публичного ключа можно зашифровать данные на отправляющем устройстве и передать зашифрованные данные на другое устройство для дешифрования с использованием приватного ключа.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир