Я пытался написать небольшой файловый сервер. Я дошел до того, что передача файлов прошла нормально, но теперь, когда я попытался добавить шифрование, происходят странные вещи. Я пытаюсь использовать зашифрованные потоки ввода / вывода для отправки файла с использованием шифрования 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();
Любые указатели в правильном направлении будут супер.