simple how example encrypt decrypt code cipher and java rsa encryption jce

how - rsa java code



Java/JCE: Descifrar el mensaje "largo" cifrado con RSA (3)

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

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

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, usando 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 () arroja 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 encontrar la manera de hacerlo funcionar correctamente. ¿Cómo se hace esto?


Con RSA, solo puede cifrar / descifrar el bloque con el tamaño hasta la longitud de la clave menos la longitud del relleno. Si tiene datos más largos que su clave, tal vez solo se haya fusionado en una matriz, por lo que debe dividirla en fragmentos con el tamaño de su clave (128 bytes sugieren 1024 teclas sin relleno, no estoy seguro de si es posible). Usar update () no es el caso aquí.

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

En términos generales, RSA no se debe utilizar para encriptar una gran cantidad de datos, ya que consume bastante tiempo. Debería usarse para encriptar la clave al cifrado simétrico, como AES.

Mire aquí: https://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java


Como dijo Erickson,

Los pasos que debes seguir para encriptar son:

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

Para descifrar:

  1. Obtener la clave privada asociada con ese par de claves utilizado para encriptar
  2. Descifrar la clave AES con clave privada
  3. Descifrar datos con la clave AES
  4. Usa datos