Ich habe versucht, einen kleinen Dateiserver zu schreiben. Ich habe es bis zu dem Punkt, wo eine Dateiübertragung ist einfach gut, aber jetzt, dass ich versucht habe, Verschlüsselung hinzufügen seltsame Dinge passieren. Ich versuche, Cipher Input/Output Streams zu verwenden, um die Datei mit DES-Verschlüsselung zu senden. Die Datei scheint vollständig vom Server übertragen zu werden, aber ich kann den Client nicht dazu bringen, sie richtig zu empfangen.
Ganz gleich, welche Art von Datei ich übertrage, der Client verlässt nie die Schleife, die ich zum Empfang der Datei verwende. Trotzdem ist es mir gelungen, .pdf- und .doc-Dateien zu empfangen, die beide keine Fehler zu haben scheinen und sich problemlos öffnen lassen. Wenn ich jedoch ein Bild sende, scheint das Ende nicht richtig zu funktionieren. Das Bild wird geöffnet, aber das Ende wird nicht angezeigt, sondern nur ein ausgegrauter Bereich.
Ich denke, dass diese Probleme zusammenhängen, aber ich weiß nicht, wie ich sie beheben kann.
Hier ist der Code, den ich verwende, um die Datei auf der Serverseite zu senden:
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
CipherOutputStream cipherOut = new CipherOutputStream(outToClient, cipher);
byte[] fileBuffer = new byte[BUFFER_SIZE];
InputStream fileReader = new BufferedInputStream(new FileInputStream(aFile));
int bytesRead;
while((bytesRead = fileReader.read(fileBuffer)) != EOF){
cipherOut.write(fileBuffer, 0, bytesRead);
}
cipherOut.flush();
Und den Code für den Empfang auf der Client-Seite:
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, serverPublicKey);
CipherInputStream cipherIn = new CipherInputStream(inFromServer, cipher);
byte[] fileBuffer = new byte[BUFFER_SIZE];
FileOutputStream fileWriter = new FileOutputStream(newFileName);
int bytesRead;
while((bytesRead = cipherIn.read(fileBuffer)) != EOF){
fileWriter.write(fileBuffer, 0, bytesRead);
}
fileWriter.flush();
fileWriter.close();
Jeder Hinweis auf die richtige Richtung wäre super.