我一直在尝试编写一个小文件服务器。我已经将它运作到可以正常传输文件了,但是现在我尝试添加加密时出现了奇怪的问题。我正在尝试使用密码输入/输出流来发送文件并使用DES加密。文件似乎已经完全被服务器传输,但是客户端无法正确接收它。
无论我传输什么样的文件,客户端都无法离开我用于接收文件的循环。即便如此,我已经成功接收了 .pdf 和 .doc 文件,两者都没有任何错误,并且可以完美打开。当我发送一张图片时,末尾似乎无法正确地传输。这张图片打开了,但是末尾从未显示,只有一个灰色区域。
我想这些问题之间可能有关联,但我不知道该如何解决它们。
以下是我在服务器端用于发送文件的代码:
任何指向正确方向的指导都将非常有用。
无论我传输什么样的文件,客户端都无法离开我用于接收文件的循环。即便如此,我已经成功接收了 .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();
任何指向正确方向的指导都将非常有用。
publicKey
和serverPublicKey
名称具有误导性,因为它们实际上代表了一个共享秘密。 - Bruno Reis