Question

J'ai un message contenu dans un octet [], chiffré avec "RSA / ECB / PKCS1Padding". Pour le déchiffrer, je crée un Cipher c et l'initie avec

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Jusqu'à présent, je n'ai déchiffré que des petits messages, en utilisant la méthode doFinal () , renvoyant un octet [] avec les octets déchiffrés.

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

Mais dans ce cas, les données sont plus volumineuses (environ 500 octets) et la méthode doFinal () lève une exception (javax.crypto.IllegalBlockSizeException: les données ne doivent pas dépasser 128 octets). . Je suppose que je dois utiliser la méthode update () -, mais je ne vois pas comment le faire fonctionner correctement. Comment cela se fait-il?

Était-ce utile?

La solution

Je pense que l'utilisation du cryptage RSA pour tout, sauf le transport de clé, est un abus.

Générez une nouvelle clé pour un chiffrement symétrique et chiffrez vos données en vrac avec cela. Puis chiffrez la clé avec RSA. Envoyez le texte chiffré de manière symétrique à votre destinataire avec la clé de chiffrement de contenu à chiffrement asymétrique.

Autres conseils

Avec RSA, vous pouvez uniquement chiffrer / déchiffrer des blocs dont la taille est égale à la longueur de la clé moins la longueur de remplissage. Si vos données sont plus longues que votre clé, elles sont peut-être simplement fusionnées dans un tableau. Vous devez donc les diviser en morceaux de la taille de votre clé (128 octets suggèrent 1024 clés sans remplissage, je ne sais pas si c'est possible). Utiliser update () n’est pas le cas ici.

Vous devez simplement savoir comment ce tableau a été créé.

De manière générale, RSA ne devrait pas être utilisé pour chiffrer une grande quantité de données car cela prend beaucoup de temps. Devrait être utilisé pour chiffrer clé à chiffrement symétrique, comme AES.

Regardez ici: https://www.owasp.org/index.php/Digital_Signature_Implementation_in_Java

Comme le disait Erickson,

Les étapes à suivre pour chiffrer sont les suivantes:

  1. Générer une paire de clés RSA (ou récupérer une clé publique dans un magasin de clés)
  2. Générer une clé symétrique (AES)
  3. Crypter les données avec la clé AES
  4. Chiffrer la clé AES avec la clé publique RSA
  5. Stockez (ou envoyez à une personne avec une clé privée) la clé AES cryptée et les données cryptées AES

Pour déchiffrer:

  1. Obtenir la clé privée associée à cette paire de clés utilisée pour chiffrer
  2. Déchiffrer la clé AES avec une clé privée
  3. Déchiffrer les données avec la clé AES
  4. Utiliser les données
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top