extension encrypt decryption cipher and java cryptography

encrypt - javax.crypto.IllegalBlockSizeException



java cryptography extension (2)

javax.crypto.IllegalBlockSizeException: los datos no deben ser más largos que 53 bytes, sé que es porque el algoritmo RSA solo puede encriptar datos que tienen una longitud de bytes máxima de la longitud de la clave RSA en bits divididos con ocho bytes menos de relleno, es decir, número de bytes máximos = longitud de la clave en bits / 8 - 11.

Aquí estoy usando un tamaño de clave 512 por lo que no está permitiendo más de 53.pero necesito mantener la clave de 512 bits, pero para encriptar más de 53 bytes hay alguna posibilidad.


¿Por qué no empleas envolvente? Genere una clave simétrica (AES), cifre sus datos con esa clave AES, luego cifre la clave AES con una clave RSA pública. Envíe los datos encriptados, junto con la clave cifrada AES. A continuación, descifre la clave AES con la clave RSA privada y utilícela para descifrar el resto de los datos. Esto le permitirá encriptar datos de cualquier tamaño.


Si y no. No puede encriptar con RSA, pero puede ir con uno de los siguientes:

  1. Haga el enfoque habitual de encriptar con algoritmo simétrico y pasar la clave encriptada con RSA. Por ejemplo, para enviar datos D a otro hombre con clave pública PK:

    1. enviar Ek (D) (D cifrado con algoritmo simétrico con la clave K)
    2. envíe también Epk (K) (cifrado K con algoritmo RSA con PK)

    El otro lado abre PK (K) para obtener K, y abre K (D) para obtener D.

  2. divida los datos en pequeños fragmentos y encripte cada uno por separado.

El primer enfoque es mucho mejor por dos razones principales:

  1. No te metas con los datos (excepto el cifrado en sí).
  2. El cifrado / descifrado simétrico es mucho más rápido que el cifrado público, por ejemplo, RC4 es un XOR simple de los datos, mientras que RSA usa una gran potencia.

(3. Debe haber una razón por la que PGP es tan común ...)