Problema al enviar fichero encriptado atravez de sockets

ethan_av
27 de Julio del 2005
Hola que tal estoy desarrollando una aplicacion cliente servidor, en la cual envio ficheros encriptados con el algoritmo DES. Pero mi problema radica que en los flujos de datos que manejo los sockets. al momento que finaliza en envio del archivo completo el cliente el servidor queda en espera no le llega el ultimo bloque de datos (queda en espera de resivir el final de archivo -1) como puedo manejar esa situacion? o por que queda bloqueado mi servidor. lo raro es que es solo cuando utilizo el algoritmo de encriptacion. que es lo que esta pasando? a continuacion pongo mi codigo para encriptar y desencriptar mi informacion.

public static void encrypt(SecretKey key, InputStream in, OutputStream out)
throws NoSuchAlgorithmException, InvalidKeyException,
NoSuchPaddingException, IOException {
// Create and initialize the encryption engine
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);

// Create a special output stream to do the work for us
CipherOutputStream cos = new CipherOutputStream(out, cipher);

// Read from the input and write to the encrypting output stream
byte[] buffer = new byte[2048];
int bytesRead=0,cont=0;
while (( bytesRead = in.read(buffer)) != -1) {
cos.write(buffer, 0, bytesRead);
cont = cont + bytesRead;
//System.out.println("Se han desencriptado: "+cont+" bytes"+" bR: "+bytesRead);
}
System.out.println("Se han encriptado: "+cont+" bytes"+" bR: "+bytesRead);
cos.close();
// For extra security, don't leave any plaintext hanging around memory.
java.util.Arrays.fill(buffer, (byte) 0);
}

public static void decrypt(SecretKey key, InputStream in, OutputStream out)
throws NoSuchAlgorithmException, InvalidKeyException, IOException,
IllegalBlockSizeException, NoSuchPaddingException,
BadPaddingException {
// Create and initialize the decryption engine
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.DECRYPT_MODE, key);

// Read bytes, decrypt, and write them out.
byte[] buffer = new byte[2048];
int bytesRead,cont=0;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(cipher.update(buffer, 0, bytesRead));
cont = cont + bytesRead;
System.out.println("Se han desencriptado: "+cont+" bytes"+" bR: "+bytesRead);
}
System.out.println("Se han desencriptado: "+cont+" bytes"+" bR: "+bytesRead);
// Write out the final bunch of decrypted bytes
out.write(cipher.doFinal());
out.flush();

}