Pregunta

Cuando se llama a la función siguiente:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

Ahora estoy consiguiendo el error: mala longitud.

Con una cadena más pequeña funciona, alguna idea de lo que el problema podría ser la cadena que estoy pasando es de menos de 200 caracteres.

¿Fue útil?

Solución

RSA cifrado sólo significa para pequeñas cantidades de datos, la cantidad de datos que se pueden cifrar depende del tamaño de la clave que está utilizando, por ejemplo, para 1024 bits claves RSA, PKCS # 1 y el relleno V1.5, puede cifrar 117 bytes como máximo, con una clave RSA 2048, puede cifrar 245 bytes.

Hay una buena razón para esto, el cifrado asimétrico es computacionalmente caro. Si desea cifrar grandes cantidades de datos que debe utilizar el cifrado simétrico. Pero lo que si quieres no repudio? Pues lo que a continuación se hace es utilizar los dos. Se crea una clave simétrica y cambiarlo mediante el cifrado asimétrico, entonces intercambiado con seguridad que la clave simétrica para cifrar grandes cantidades de datos. Esto es lo que SSL y el uso de WS-Secure debajo de las cubiertas.

Otros consejos

Para búsquedas en el futuro con respecto a RSA excepciones mal longitud ...

Se puede calcular el número máximo de bytes que pueden ser cifrados con un tamaño de clave particular en lo siguiente:

((KeySize - 384) / 8) + 37

Sin embargo, si el relleno cifrado asimétrico óptimo (OAEP) parámetro es cierto, como lo es en el post original, los siguientes se pueden utilizar para calcular el bytes max:

((KeySize - 384) / 8) + 7

Los tamaños de clave legales 384 thru 16384 con un tamaño de salto de 8.

Como se explicó anteriormente, la solución a las excepciones 'malo longitud' tipo es para hibridar el uso de la encriptación simétrica y asimétrica, por lo que el tamaño del texto que está cifrando no está limitado por el tamaño de la clave. Es, básicamente, utiliza el cifrado RSA para cifrar la clave aleatoria asimétricamente .

  

Para el cifrado:

     
      
  1. Generar una clave aleatoria de la longitud requerida para técnica de cifrado simétrico como AES o Rijndael.

  2.   
  3. De forma simétrica cifrar los datos utilizando texto / AES / Rijndael utilizando la clave aleatoria generada en el paso 1.

  4.   
  5. Uso de RSA, asimétricamente cifrar la clave aleatoria generada en el paso 1.

  6.   
     

para el descifrado:

     
      
  1. En primer lugar descifrar la clave aleatoria generada por Rijndael AES / utilizando su clave privada RSA.

  2.   
  3. A continuación, descifrar el texto original / datos utilizando la clave aleatoria descifrado RSA-

  4.   

Para una demostración, puede que desee echar un vistazo este siguiente ejemplo en C #:

http: / /www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-c/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top