Byte Array kommt nicht an

MR_UNIX

Bekanntes Mitglied
Moin,

ich versuche gerade einen RSA Public Key über das Netzwerk zu verschicken. Das Byte-Array was den Key enthält, kommt aber seltsamerweise nicht auf der Clientseite an, wird aber im Server losgeschickt und der Stream auch geflusht.
Habt ihr da zufällig eine Idee? Hier der Code:

Serverseitig:
Java:
if (reader.readLine().equalsIgnoreCase("FIRSTRUN"))
			{
				// Write server public key
				X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Storage.getKeyPair().getPublic().getEncoded());
				byte[] keyBuffer = x509EncodedKeySpec.getEncoded();
				writer.write(keyBuffer.length);
				writer.flush();
				this.targetUser.getOutputStream().write(keyBuffer);
				this.targetUser.getOutputStream().flush();
				System.out.println("hallo " + keyBuffer.length);
				
				// Try to receive client public key
				if (reader.readLine().equalsIgnoreCase("PUBKEY"))
				{
					int keylength = reader.read();
					byte[] clientPubkeyBuffer = new byte[keylength];
					this.targetUser.getInputStream().read(clientPubkeyBuffer);
					
					KeyFactory keyFactory = KeyFactory.getInstance("RSA");
					X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(clientPubkeyBuffer);
					PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
					
					IMServer.getServer().getCache().addKey(this.targetUser, publicKey);
				}
				else
				{
					writer.write("err_protocol_firstrun\n");
					writer.flush();
					
					writer.close();
					this.targetUser.logout();
					this.targetUser = null;
				}
			}

Clientseitig:
Java:
try
		{
			encryption = Cipher.getInstance("RSA");
			decryption = Cipher.getInstance("RSA");
			
			Socket socket = new Socket("localhost", 22558);
			BufferedInputStream binaryInput = new BufferedInputStream(socket.getInputStream());
			BufferedOutputStream binaryOutput = new BufferedOutputStream(socket.getOutputStream());
			
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			
			KeyPair keypair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
			
			X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keypair.getPublic().getEncoded());
			
			PublicKey serverPublic = null;
			
			System.out.println("writing first run command");
			
			writer.write("FIRSTRUN\n");
			writer.flush();
			
			System.out.println("reading key length");
			
			byte[] keyBuffer = new byte[reader.read()];
			System.out.println("reading key (length=" + keyBuffer.length + ")");
			binaryInput.read(keyBuffer);
			
			System.out.println("generating key from server");
			X509EncodedKeySpec serverKeySpec = new X509EncodedKeySpec(keyBuffer);
			serverPublic = KeyFactory.getInstance("RSA").generatePublic(serverKeySpec);
			
			System.out.println("init ciphers");
			encryption.init(Cipher.ENCRYPT_MODE, serverPublic);
			decryption.init(Cipher.DECRYPT_MODE, keypair.getPrivate());
			
			System.out.println("writing pubkey command");
			writer.write("PUBKEY\n");
			writer.flush();
			
			System.out.println("writing key length");
			writer.write(x509EncodedKeySpec.getEncoded().length);
			writer.flush();
			
			System.out.println("writing key");
			binaryOutput.write(x509EncodedKeySpec.getEncoded());
			binaryOutput.flush();
			
			System.out.println("waiting for answer");
			String encryptedKeycheck = reader.readLine();

			System.out.println("decoding answer");
			BASE64Decoder myDecoder = new BASE64Decoder();
			byte[] cryptedBuffer = myDecoder.decodeBuffer(encryptedKeycheck);
		    String decryptedKeycheck =  new String(decryption.doFinal(cryptedBuffer));
		    
		    System.out.println(decryptedKeycheck);
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}

Die Konsolenausgabe im Client kommt bis "reading key (length=162)", sprich die Länge des Schlüssels wurde erfolgreich übertragen und sie stimmt auch mit der überein, die am Server ausgegeben wird. Der erste Punkt, der mich stutzig macht ist aber, dass die Länge eben nur 162 Byte beträgt, was irgendwie keine gewöhnliche Größe ist. Liegt das am Encoding?

Hoffentlich kann mir wer helfen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
W Socket Byte Array senden Netzwerkprogrammierung 2
B Socket Byte-array Komprimieren Netzwerkprogrammierung 3
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
D Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen Netzwerkprogrammierung 3
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
C Byte Stream dekodieren Netzwerkprogrammierung 7
N Paket-Analysieren Byte-Streams Netzwerkprogrammierung 12
K Socket byte Schleife beendet nicht Netzwerkprogrammierung 9
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
J byte[] auf Stream schreiben Netzwerkprogrammierung 2
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
E RTP Packet lesen - Byte Problem 0xFFFFFF80 statt 0x80 Netzwerkprogrammierung 7
V Zuweisen einer InetAddress mit einem byte Netzwerkprogrammierung 5
D Byte-Zähler des Netzwerkinterface auslesen Netzwerkprogrammierung 2
T Kommunikation auf Byte-Ebene zw. C und Java via Socket Netzwerkprogrammierung 12
H Byte-Codierung bei Socket-Verbindung ändern Netzwerkprogrammierung 8
8 Socket Streams nur mit Byte? Netzwerkprogrammierung 2
G binärwert aus 2 byte auslesen Netzwerkprogrammierung 7
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
O JAVA hängt bei Dateikopie über LAN ein Byte an!!! ARGH Netzwerkprogrammierung 3
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
A Server Antwort enthält JSON Objekt/Array Netzwerkprogrammierung 8
precoc String Array versenden Netzwerkprogrammierung 7
U ein ganzes Array effizient übermitteln Netzwerkprogrammierung 6
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
J Array oder Object über Sockets Netzwerkprogrammierung 8
O Über Socket Array versenden Netzwerkprogrammierung 5
A array übers netzwerk (anfänger) Netzwerkprogrammierung 8
S Socket-Array vs. MulticastSocket Netzwerkprogrammierung 2
P Array per Socketverbindung versenden Netzwerkprogrammierung 2
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4
T OutputStream kommt nicht an Netzwerkprogrammierung 18
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
Thallius JDBC getConnection kommt nicht zurück Netzwerkprogrammierung 1
M Nur die erste Nachricht kommt beim Server an Netzwerkprogrammierung 11
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
C Über welchen Netzwerkadapter kommt mein receive? Netzwerkprogrammierung 15
K TrafficClass eines UDP Pakets kommt beim Empfänger nicht an Netzwerkprogrammierung 5
B Nachricht über Sockets kommt nicht an Netzwerkprogrammierung 8
B InetAddress.getHostAddress() wo kommt die IP Auslösung her? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
K Chat: Verbindung kommt nicht zu stande Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben