Передача публичного ключа шифрования 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 происходит вышеупомянутая ошибка.