CipherInputStream CipherOutputStream
-
Hallo,
ich habe folgendes Problem:
ich wollte mal einen Chat programmieren, der die Daten mit DES verschlüsselt (das macht der Client). Der Server sendet dann diese Daten an alle Clients und die müssen dannwieder selber für die Entschlüsselung sorgen.
Das macht in etwa der Client:
Socket client; String Nachricht = ""; private Cipher c, d; private Key k; private CipherOutputStream cos; private CipherInputStream cis; byte bNachricht[]; int length; c = Cipher.getInstance("DES"); d = Cipher.getInstance("DES"); k = new SecretKeySpec("01234567".getBytes(), "DES"); c.init(Cipher.ENCRYPT_MODE,k); d.init(Cipher.DECRYPT_MODE,k); cos = new CipherOutputStream(client.getOutputStream(),c); cis = new CipherInputStream(client.getInputStream(),d); //Das ist in der run() Methode eines Threads um Nachrichten vom Server zu empfangen while( (length = cis.read(bNachricht, 0, 60)) != -1) { Nachricht += new String(bNachricht,0,length); } //Funktion um Text an den Server zu schicken public void Senden(String s) { try { cos.write(s.getBytes()); cos.flush(); } catch (java.io.IOException e) { } }
Und das in etwa der Server:
private DataInputStream in; in = new DataInputStream(client.getInputStream()); //Das ist in der run() Methode eines Threads um Nachrichten eines Clients zu empfangen while( (length = in.read(Nachricht, 0, 60)) != -1) { Server.Senden2(Nachricht, 0, length); } //Diese Methode sendet dann entgültig die Nachricht zu den Clients public void Senden2(byte[] b_Nachricht, int start, int end) { v.out.write(b_Nachricht, start, end); //out ist ein PrintStream des Clients }
Dann schicke ich mit
Senden("Das ist ein Test! Ein toller Test!");einen Text los. Beim Server ist length dann nur noch 32 und beim Client nur noch 24! Am Ende kommt also beim Client:
Das ist ein Test! Ein to
an.Kann mir jemand sagen, was ich falsch mache?
Danke!
Robert