67 votes

Chiffrement RSA, mauvaise longueur

Lors de l'appel de la fonction suivante:

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

Je reçois maintenant l'erreur: mauvaise longueur.

Avec une chaîne plus petite, cela fonctionne, toutes les idées que le problème pourrait être la chaîne que je passe est inférieure à 200 caractères.

96voto

blowdart Points 28735

Le chiffrement RSA est seulement pour de petites quantités de données, la quantité de données que vous pouvez chiffrer dépend de la taille de la clé que vous utilisez, par exemple pour une résolution 1024 bit RSA clés, et PKCS # 1 V1.5 rembourrage, vous pouvez crypter 117 octets au plus, avec une clé RSA de 2048, vous pouvez crypter 245 octets.

Il y a une bonne raison à cela, le chiffrement asymétrique est gourmand en ressources. Si vous souhaitez crypter de grandes quantités de données, vous devriez être en utilisant un chiffrement symétrique. Mais que faire si vous voulez la non-répudiation? Bien ce que vous faire est d'utiliser les deux. Vous créez une clé symétrique et d'échange en utilisant le chiffrement asymétrique, alors que échangés en toute sécurité à clé symétrique pour chiffrer vos grandes quantités de données. C'est ce que SSL et WS-Secure sous les couvertures.

56voto

abscode Points 488

Pour les recherches futures concernant les exceptions de mauvaise longueur RSA ...

Vous pouvez calculer le nombre maximal d'octets pouvant être chiffrés avec une taille de clé particulière avec les éléments suivants:

((KeySize - 384) / 8) + 37

Cependant, si le paramètre optimal de remplissage de chiffrement asymétrique (OAEP) est vrai, comme il l'est dans la publication d'origine, les éléments suivants peuvent être utilisés pour calculer les octets max:

((KeySize - 384) / 8) + 7

Les tailles de clé légales sont de 384 à 16384 avec une taille de saut de 8.

19voto

AndyUK Points 1493

Comme expliqué ci-dessus, la solution à la " mauvaise longueur de type d'exceptions est à hybrider l'utilisation du cryptage symétrique et asymétrique, de sorte que la taille du texte que vous chiffrez n'est pas limité par la taille de la clé. Fondamentalement, vous utilisez le cryptage RSA, de façon asymétrique chiffrer l'aléatoire de la clé .

Pour le chiffrement:

  1. Générer une clé aléatoire de la longueur nécessaire pour le chiffrement symétrique technique comme AES ou de Rijndael.

  2. Symétriquement de crypter votre texte/données en utilisant AES/Rijndael à l'aide de la clé aléatoire générée à l'étape 1.

  3. À l'aide de RSA, de façon asymétrique chiffrer la clé aléatoire générée à l'étape 1.

Pour le décryptage:

  1. D'abord déchiffrer les AES/Rijndael-clé aléatoire générée à l'aide de votre clé RSA.

  2. Puis déchiffrer le texte d'origine/de données à l'aide de la RSA déchiffré clé aléatoire

Pour une démonstration, vous pouvez avoir un coup d'oeil cet exemple en C#:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X