我一直在試圖寫一個小文件服務器。我知道它的文件傳輸很好,但現在我試圖添加加密奇怪的事情正在發生。我試圖使用密碼輸入/輸出流來使用DES加密來發送文件。該文件似乎完全由服務器傳輸,但我無法讓客戶端正確接收它。Java通過套接字發送加密文件
無論我傳輸什麼類型的文件,客戶端都不會離開我用來接收文件的循環。即使如此,我已經設法接收.pdf和.doc文件,這兩個文件都沒有任何錯誤,並且完全打開。當我發送圖像時,最終似乎沒有正確地通過。圖像打開,但最終不會顯示,只是灰色的區域。
我認爲這些問題是相關的,但我不知道如何解決它們。
這裏是我用來發送服務器端的文件中的代碼:
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();
和代碼接受它在客戶端:
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();
在右邊的指針方向會超級。
正如一個附註,DES是一種**對稱加密算法**,也就是說,在處理時沒有**公鑰**(或私鑰)的概念DES。變量的名稱「publicKey」和「serverPublicKey」具有誤導性,因爲它們實際上代表**共享密鑰**。 – 2011-05-19 00:16:41
您不關閉輸出流服務器端。是EOF -1或0它應該是-1 – 2011-05-19 00:26:10