ejemplo c# encryption rsa encryption-asymmetric

c# - ejemplo - Encriptación RSA, obteniendo mala longitud



c# rsa encryption (3)

Al llamar a la siguiente función:

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

Ahora estoy obteniendo el error: mala duración.

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


Como se explicó anteriormente, la solución para las excepciones de tipo de "mala extensión" es hibridar el uso de encriptación simétrica y asimétrica, de modo que el tamaño del texto que está encriptando no está restringido por el tamaño de la clave. Básicamente, utiliza el cifrado RSA para encriptar asimétricamente la clave aleatoria.

Para el cifrado:

  1. Genere una clave aleatoria de la longitud requerida para la técnica de encriptación simétrica como AES o Rijndael.

  2. Encripte simétricamente su texto / datos usando AES / Rijndael usando la clave aleatoria generada en el paso 1.

  3. Usando RSA, encripte asimétricamente la clave aleatoria generada en el paso 1.

Para descifrado:

  1. Primero descifra la clave aleatoria generada por AES / Rijndael usando tu clave RSA privada.

  2. A continuación, descifrar el texto / datos originales utilizando la clave aleatoria descifrada por RSA

Para una demostración, es posible que desee echar un vistazo al siguiente ejemplo en C #:

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


El cifrado RSA solo significa pequeñas cantidades de datos, la cantidad de datos que puede encriptar depende del tamaño de la clave que está utilizando, por ejemplo, para claves RSA de 1024 bits y PKCS # 1 V1.5 padding, puede encriptar 117 bytes como máximo, con una clave 2048 RSA, puede encriptar 245 bytes.

Hay una buena razón para esto, la encriptación asimétrica es computacionalmente costosa. Si desea encriptar grandes cantidades de datos, debe usar el cifrado simétrico. Pero, ¿y si quieres no repudiar? Bueno, lo que haces entonces es usar ambos. Usted crea una clave simétrica y la intercambia usando cifrado asimétrico, luego esa clave simétrica intercambiada con seguridad para encriptar sus grandes cantidades de datos. Esto es lo que utilizan SSL y WS-Secure debajo de las cubiertas.


Para búsquedas futuras con respecto a las excepciones de longitud incorrecta de RSA ...

Puede calcular el número máximo de bytes que se pueden cifrar con un tamaño de clave determinado con lo siguiente:

((KeySize - 384) / 8) + 37

Sin embargo, si el parámetro de relleno de cifrado asimétrico óptimo (OAEP) es verdadero, como lo es en la publicación original, se puede usar lo siguiente para calcular los bytes máximos:

((KeySize - 384) / 8) + 7

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