Foro de elhacker.net

Programación => Java => Mensaje iniciado por: MPLS en 26 Febrero 2016, 20:57 pm



Título: PaddedBufferedBlockCipher de Bouncy Castle
Publicado por: MPLS en 26 Febrero 2016, 20:57 pm
Estoy usando la clase PaddedBufferedBlockCipher de Bouncy Castle para implementar un mecanismo de cifrado por bloques, pero el tema es que cuando llamo al método processBytes, este me devuelve un cero, es  decir no esta generando ninguna salida.

Dejo aquí mi inicializacion del cifrador:

Código
  1. PaddedBufferedBlockCipher cifrador = new PaddedBufferedBlockCipher(new CBCBlockCipher(new RijndaelEngine(192)), new X923Padding() );
  2. cifrador.init(true, new KeyParameter(clave));
Mi problema es que cuando llamo al metodo processBytes este metodo no hace nada, sin presentar excepciones, una vez ajustados correctamente los tamaños de bloque.(Trabajo con una clave de 32 bytes, y voy procesando bloque a bloque de 24 bytes)

Este es el trozo de codigo:
Código
  1. bytesCifrados = cifrador.processBytes(bloqueLeido,0,24,bloqueSalida,0);

Siendo bloqueLeido y bloqueSalida, arrays de bytes de 24 posiciones

La locura de todo esto es que vuelvo a llamar a processBytes pero pidiendo procesar solo un byte y me devuelve el 24 que esperaba antes, alguien que conozca el método me puede decir si lo que hace es devolver lo que había procesado antes de procesar lo que "le mandes en ese instante", por que es lo único que me cuadra, y en la api no explican nada de esto.

Dejo el enlace a la api: http://www.bouncycastle.org/docs/docs1.5on/index.html (http://www.bouncycastle.org/docs/docs1.5on/index.html)


EDITO: Acabo de hacer otra prueba para intentar comprender esto pero sigue siendo todo un misterio, os la comento:
Código
  1. byte[] bloqueLeido = new byte[24];
  2. byte[] bloqueSalida = new byte[24];
  3. System.out.println("la primera vez devuelvo esto ="+ cifrador.processBytes(bloqueLeido,0,24,bloqueSalida,0));
  4. System.out.println("la segunda vez devuelvo esto ="+ cifrador.processBytes(bloqueLeido,0,24,bloqueSalida,0));

Pues la salida es la siguiente:

Código
  1. la primera vez devuelvo esto =0
  2. la segunda vez devuelvo esto =24