# Frage zur Verschlüsselung mit CipherInputStream



## anfänger15 (15. Mai 2008)

hallo,

ich arbeite zur Zeit an einem kleinen Prog, dass Strings durchs Netzt schickt. Es funktioniert nun alles, jedoch wollte ich nun das ganze verschlüsseln und dachte ich kann einfach den InputStream mit einem CipherInputStream ersetzten und der Datenaustausch läuft nun verschlüsselt ab. Seit dem ich dies versucht habe sendet der Client aber nichts mehr.

An was kann das liegen?


```
Cipher c = Cipher.getInstance( "DES" ); 
    Key k = new SecretKeySpec( pass.getBytes(), "DES" ); 
    c.init( Cipher.DECRYPT_MODE, k ); 
 
    
    CipherInputStream cis = new CipherInputStream(socket.getInputStream(), c );
```


danke


----------



## cburghardt (15. Mai 2008)

Wie sieht der weitere Code aus? Und wie der Client (das ist ja der lesende Teil und nicht der sendende)?


----------



## anfänger15 (16. Mai 2008)

Dies sollte auch nur ein Beispiel sein.
Ich hab lediglich jedesmal den InputStream bzw. den OutputStream mit einem CipherOutputStream ersetzt jedoch funktioniert es nicht. Verwende ich aber nur einen OutputStream ohne den Umweg über CipherOutputStream funktioniert es.



```
Cipher c = Cipher.getInstance( "DES" );
    Key k = new SecretKeySpec( pass.getBytes(), "DES" );
    c.init( Cipher.ENCRYPT_MODE, k );

   
    CipherOutputStream cis = new CipherOutputStream(socket.getOutputStream(), c );
```


----------



## cburghardt (16. Mai 2008)

Empfängst du gar keine Daten?
Versuch mal das: http://www.unix.com.ua/orelly/java-ent/security/ch13_06.htm


----------



## anfänger15 (17. Mai 2008)

Ich empfange erst daten nachdem ich den OutputStream schließe. Ich habe es auch so versucht wie in dem Link den cburghardt gepostet hat, jedoch ändert dies auch nichts daran.


----------



## cburghardt (19. Mai 2008)

Hast du auch die Cipher geändert? Wenn du kein Padding angibst, wird eine Provider-spezifische Implementierung verwendet, dass ist ein wenig tricky. Ich würde das in dem Beispiel verwendete CFB8 für Byte-Streaming verwenden.
Nachdem du den Rest nicht gepostet hast weiß ich nicht wie du die Daten verarbeitest und wie viele Daten du sendest. Verwendest du einen flush? Die Cipher selber puffert auch noch mal, denk dran.


----------



## anfänger15 (19. Mai 2008)

ok nun funktioniert es so einigermaßen, jedoch hab ich jetzt das Problem, dass ich bisher immer flush aufgerufen habe, um z.B. das eingegebene Passwort sofort zu senden, jedoch soll man dies aber so weit ich das gelesen habe nicht tun. 

Was nun? Ich kann nicht warten bis der User genügend Zeichen eingegeben hat, damit der Client etwas sendet.


----------



## anfänger15 (19. Mai 2008)

ok funktioniert mache jetzt einfach ein flush und bisher ist mir noch kein Fehler aufgefallen

danke für die Hilfe


----------

