Передача публичного ключа шифрования RSA от сервера (на python) клиенту (на java)

пытаюсь отправить публичный ключ от сервера на python клиенту на java. Однако выдаётся ошибка: invalid key format

пример сервера:

from Crypto.PublicKey import RSA
import socket


IP = socket.gethostbyname(socket.gethostname())
PORT = 12333

s = socket.socket()
s.bind((IP, PORT))
s.listen()

private_key = RSA.generate(2048)
public_key = private_key.publickey()


conn, addr = s.accept()
conn.send(public_key.export_key())

пример клиента:

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;


public class Main {
    public static void main(String[] args) throws Exception {
        Client client = new Client();
        client.startConnection("IP", 12333);
        
        byte[] publicKeyEncoded = client.receiveMessage();


        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        EncodedKeySpec encryptKeySpec = new X509EncodedKeySpec(publicKeyEncoded);
        PublicKey PubKey = keyFactory.generatePublic(encryptKeySpec);


    }
}

.

import java.net.*;
import java.io.*;

public class Client {
        private Socket clientSocket;
        private DataOutputStream out;
        private DataInputStream in;

        public void startConnection(String ip, int port) throws IOException {
            clientSocket = new Socket(ip, port);
            out = new DataOutputStream(clientSocket.getOutputStream());
            in = new DataInputStream(clientSocket.getInputStream());
        }

        public void sendMessage(byte[] msg) throws IOException {
            out.write(msg);
        }

        public byte[] receiveMessage() throws IOException {
            int length = in.available();

            while(length == 0) {
                length = in.available();
            }

            byte[] massageByte = new byte[length];
            in.read(massageByte);
            return massageByte;
        
       }


        public void stopConnection() throws IOException {
            in.close();
            out.close();
            clientSocket.close();
        }

}

Ошибка:

Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
    at java.base/sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:241)
    at java.base/java.security.KeyFactory.generatePublic(KeyFactory.java:351)
    at Main.main(Main.java:18)
Caused by: java.security.InvalidKeyException: invalid key format
    at java.base/sun.security.x509.X509Key.decode(X509Key.java:387)
    at java.base/sun.security.x509.X509Key.decode(X509Key.java:402)
    at java.base/sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:151)
    at java.base/sun.security.rsa.RSAPublicKeyImpl.newKey(RSAPublicKeyImpl.java:78)
    at java.base/sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:327)
    at java.base/sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:237)
    ... 2 more

подскажите, пожалуйста, что делать. Что сервер, что клиент исправно работают, если их пара написана на том же языке, что и они сами, однако при попытке соединить python и java происходит вышеупомянутая ошибка.


Ответы (0 шт):