Java - Gran Problema

   
Vista:

Gran Problema

Publicado por Luis (2 intervenciones) el 29/04/2008 00:28:47
Hola chicos/as,

tengo una gran problema con el algoritmo de encriptación AES. Llevo varios días liado con el tema pero no consigo solucionarlo, por lo que he decidido acudir a vuestra ayuda, a ver si me podéis echar una mano en el tema.

La cuestión es la siguiente:

Yo he encontrado varios ejemplos de encriptación de datos mediante AES, los cuales, al probarlos en un único programa me funcionan adecuadamente, encriptando y desencriptando todas las cadenas que se le pasan como parámetros.

Cuando traspaso estos ejemplos a mi código de mi aplicación, donde tengo un cliente y un servidor realizados ambos en java, al encriptar los datos en el cliente, y pasarle los datos encriptados (mediante sockets) al servidor, la encriptación en el cliente la realiza bien, y en ocasiones, también me desencripta bien en el servidor. El problema me pasa a veces, y me salta la siguiente excepción:

javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when
decrypting with padded cipher
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at AES.desencriptarDatos(AES.java:131)
at AplicacionServidor.main(AplicacionServidor.java:84)

Otras veces me pone que el tamaño de bloque es incorrecto con lo que no se ha realizado el padding adecuadamente. Llevo bastantes días con el tema y no consigo solucionar nada al respecto. Me pasé de 3DES por este problema a AES y ahora sigo con el mismo error en este algoritmo. ¿Por qué puede ser mir problema?

Espero que alguien me pueda echar una mano, o guiarme en cómo puedo solucionar mi problema. Muchas gracias de antemano, un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Gran Problema

Publicado por Tom (910 intervenciones) el 29/04/2008 08:53:54
¿ Has probado a desencriptar también en el cliente (para probar) ?

Quizás tu problema está en la forma de leer los datos del socket. ¿Estás comprobando las longitudes de los datos leídos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gran Problema

Publicado por Tom (910 intervenciones) el 29/04/2008 09:17:29
Por otra parte, podrías considerar usar SSL, te ahorrarías algunos problemas.

Ejemplo aquí:

http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gran Problema

Publicado por Luis (39 intervenciones) el 29/04/2008 11:37:34
Creo que el problema está en lo que comentas Tom, que solamente leo una línea de texto desde el socket, sin comprobar la longitud del contenido leído. Espero que sea por eso, porque el tema me está trayendo de cabeza y no consigo solucionarlo, llevo varíos días liado con esto.

En cuanto tenga un momento, probaré a comprobar la longitud del texto leído desde el socket, para saber si realmente el problema es ese. En caso de que no sea, postearé nuevamente para ver qué está ocurriendo en mi caso.

Tom, por otra parte, sí he probado lo que comentas, a desencriptar desde el cliente, y me lo hace correctamente. Por esto que dices, he pensado que posiblemente la causa de mi error en la desencriptaciñón sea esa, ya que desconocía totalmente que el socket no te garantizaba que te leyera todos los datos de un tirón.

Como digo, lo probaré en cuanto tenga un momento libre, y espero que sea ese el problema. De todas maneras, comentaré lo que me ocurra, tanto si he solucionado el problema como si no.

Gracias por tu ayuda Tom, un saludo cordial.....;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar