Question

Lorsque vous appelez la fonction suivante:

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

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

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

Était-ce utile?

La solution

le cryptage RSA est signifie que 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 clés RSA 1024 bits et PKCS # 1 rembourrage V1.5, vous pouvez chiffrer 117 octets au maximum, avec une clé RSA 2048, vous pouvez chiffrer 245 octets.

Il y a une bonne raison pour cela, le chiffrement asymétrique est informatiquement cher. Si vous voulez chiffrer de grandes quantités de données que vous devriez utiliser le chiffrement symétrique. Mais si vous voulez la non-répudiation? Eh bien ce que vous faites alors est utiliser les deux. Vous créez une clé symétrique et l'échange à l'aide d'un cryptage asymétrique, alors que l'échange en toute sécurité à clé symétrique pour chiffrer vos grandes quantités de données. C'est ce que SSL et l'utilisation de WS-Secure sous les couvertures.

Autres conseils

Pour les recherches futures sur les exceptions mauvaise longueur RSA ...

Vous pouvez calculer le nombre maximum d'octets qui peut être chiffré avec une taille de clé particulière à ce qui suit:

((KeySize - 384) / 8) + 37

Cependant, si le paramètre Optimal Asymmetric Encryption Padding (OAEP) est vrai, comme il se trouve dans le poste d'origine, ce qui suit peut être utilisée pour calculer les octets max:

((KeySize - 384) / 8) + 7

Les dimensions clés juridiques sont 384-16384 avec une taille de saut de 8.

Comme expliqué ci-dessus, la solution du type « mauvaise longueur » des exceptions est à hybrident l'utilisation du chiffrement symétrique et asymétrique, de sorte que la taille du texte que vous cryptez est pas limité par la taille de la clé. Vous utilisez essentiellement le cryptage RSA pour chiffrer asymétriquement l'aléatoire touche .

  

Pour le chiffrement:

     
      
  1. Générer une clé aléatoire de la longueur requise pour la technique de chiffrement symétrique tels que AES ou Rijndael.

  2.   
  3. chiffrer Symétriquement votre texte / données via AES / Rijndael en utilisant la clé aléatoire généré à l'étape 1.

  4.   
  5. Utilisation de RSA, chiffrer asymétriquement la clé aléatoire générée à l'étape 1.

  6.   
     

Pour le décryptage:

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

  2.   
  3. décrypter ensuite le texte original / données à l'aide de la clé aléatoire RSA-déchiffré

  4.   

Pour une démonstration, vous pouvez vouloir jeter un oeil cet exemple suivant en C #:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top