2011-05-09 4 views
6

javax.crypto.IllegalBlockSizeException: los datos no deben exceder los 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 dividido con ocho menos once relleno bytes, es decir, número de bytes máximos = longitud de la clave en bits/8 - 11.javax.crypto.IllegalBlockSizeException

Aquí estoy usando un tamaño de clave 512 por lo que no está permitiendo más de 53.but i necesidad de mantener 512 clave de bit pero para encriptar más de 53 bytes hay alguna posibilidad.

Respuesta

7

Sí y no. No se puede cifrar con RSA, pero se puede ir con uno de los siguientes:

  1. ¿Tienen el enfoque habitual de cifrar con el algoritmo simétrico y pasando la clave cifrada con RSA. Por ejemplo, para enviar datos D a otro hombre con clave pública PK:

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

    El otro PK abierto lateral (K) para obtener K, y abierto K (D) para obtener D.

  2. dividir los datos en trozos pequeños y cifrar cada uno por separado.

El primer enfoque es una mucho mejor por dos razones principales:

  1. no se juega con los datos (a excepción de la encriptación 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 PGP es tan común ...)

+0

es posible encriptar gran cantidad de datos con otro algoritmo asimétrico criptográfico como DSA – Lalchand

+0

DSA es un algoritmo de firma, no algoritmo de encriptación, y no, ya que todos los algoritmos de encriptación que conozco se basan en los mismos principios matemáticos, esto no es posible, pero vea mi respuesta editada en aproximadamente dos minutos. – MByD

+0

con respecto al comentario anterior - Olvidé escribir - todos los algoritmos de encriptación ** públicos ** .. – MByD

1

¿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.