Шифрование RSA в PYTHON. Как изначально генерировать публичный ключ, а на другом устройстве имея публичный генерировать приватный? Необходимо генерировать публичный ключ по нему шифровать информацию и после этого на другое устройство отправлять публичный ключ и по публичному ключу генерировать приватный и расшифровывать текст
Для реализации шифрования 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() )
С помощью этого публичного ключа можно зашифровать данные на отправляющем устройстве и передать зашифрованные данные на другое устройство для дешифрования с использованием приватного ключа.
Для реализации шифрования RSA в Python и генерации публичного и приватного ключей необходимо использовать модуль cryptography.
Пример кода для генерации публичного и приватного ключей и шифрования/дешифрования данных с их использованием:
from cryptography.hazmat.backends import default_backendfrom 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()
)
С помощью этого публичного ключа можно зашифровать данные на отправляющем устройстве и передать зашифрованные данные на другое устройство для дешифрования с использованием приватного ключа.