簡體   English   中英

Java通過套接字發送加密文件

[英]Java sending encrypted file over socket

我一直在嘗試編寫一個小文件服務器。 我得到了文件傳輸的好處,但現在我已經嘗試添加加密奇怪的事情正在發生。 我正在嘗試使用密碼輸入/輸出流來使用DES加密來發送文件。 該文件似乎完全由服務器傳輸,但我無法讓客戶端正確接收它。

無論我傳輸什么類型的文件,客戶端都不會離開我用來接收文件的循環。 即便如此,我還是設法收到.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();

任何正確方向的指針都是超級的。

  while((bytesRead = cipherIn.read(fileBuffer)) != EOF){

只是繼續閱讀,直到'bytesRead'的數量給你EOF,但這不會發生,因為你沒有關閉套接字(至少不是我能看到你的代碼)在另一端。

我懂了

cipherOut.flush() ;

但這不會關閉套接字。 如果它只是“超出范圍”,它將不會被關閉,直到垃圾收集器收獲對象。

你不要關閉CipherOutputStream服務器端

使用塊密碼,刷新可能會導致某些字節不被發送,直到塊被填滿或執行關閉將導致填充生效並允許接收器找到EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM