Pregunta

Tengo un mensaje contenido en un byte [], encriptado con "RSA / ECB / PKCS1Padding". Para descifrarlo, creo un Cipher c y lo inicio con

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Hasta ahora solo he descifrado mensajes pequeños, utilizando el método doFinal () , devolviendo un byte [] con los bytes descifrados.

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

Pero en este caso los datos son más grandes (aproximadamente 500 Bytes), y el método doFinal () genera una excepción (javax.crypto.IllegalBlockSizeException: los datos no deben tener más de 128 bytes) . Supongo que necesito usar el método update () , pero no puedo entender cómo hacer que funcione correctamente. ¿Cómo se hace esto?

¿Fue útil?

Solución

Creo que usar cifrado RSA para cualquier cosa que no sea el transporte de claves es abuso.

Genere una nueva clave para un cifrado simétrico y cifre sus datos masivos con eso. Luego encripte la clave con RSA. Envíe el texto cifrado cifrado simétricamente junto con la clave de cifrado de contenido cifrado asimétricamente a su destinatario.

Otros consejos

Con RSA solo puede cifrar / descifrar bloques con un tamaño de hasta la longitud de la clave menos la longitud del relleno. Si tiene datos más largos que su clave, tal vez solo se fusionen en una matriz, por lo que debe dividirlos en trozos con el tamaño de su clave (128 bytes sugiere 1024 claves sin relleno, no estoy seguro de si es posible). El uso de update () no es el caso aquí.

Simplemente, debe saber cómo se creó esta matriz.

En términos generales, RSA no debe usarse para cifrar una gran cantidad de datos, ya que consume bastante tiempo. Debe usarse para cifrar la clave en un cifrado simétrico, como AES.

Echa un vistazo aquí: https://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java

Como dijo Erickson,

Los pasos que debe seguir para cifrar son:

  1. Generar par de claves RSA (o recuperar clave pública de un almacén de claves)
  2. Generar clave simétrica (AES)
  3. Cifrar datos con clave AES
  4. Cifrar clave AES con clave pública RSA
  5. Almacene (o envíe a una persona con clave privada) la clave AES cifrada y los datos cifrados AES

Para descifrar:

  1. Obtener clave privada asociada con ese par de claves utilizado para cifrar
  2. Descifrar clave AES con clave privada
  3. Descifrar datos con clave AES
  4. Usar datos
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top