[Java - Cryptographie] Décryptage RSA par block (multipart decryption)

Décryptage RSA par block (multipart decryption) [Java - Cryptographie] - Java - Programmation

Marsh Posté le 29-03-2007 à 11:00:21    

Bonjour,
 
Je dispose de 2 applets java séparées.
 
-La première génère un hash MD5 d'un fichier puis signe ce hash avec l'algo "MD5withRSA" en utilisant la clé privée lue à partir d'un certificat (fichier au format PKCS#12). Un fichier .sig est généré.
-La deuxième lit le fichier .sig, décrypte la signature avec l'algorithme "RSA" pour pouvoir lire le hash MD5.
 
Le problème se pose lors du décryptage de la signature. Un bout de code :
 

Code :
  1. // Obtain an object to perform encryption or decryption
  2.   Cipher cipher = Cipher.getInstance("RSA", provBC);
  3.   // Initialize the cipher object for decryption
  4.   cipher.init(Cipher.DECRYPT_MODE, cert.getPublicKey());
  5.   // Now decrypt data
  6.   System.out.println("sig len : " + sig.length);
  7.   plainText = new byte[cipher.getOutputSize(sig.length)];
  8.   byte[] pText1 = new byte[127];
  9.   byte[] pText2 = new byte[127];
  10.   byte[] pText3 = new byte[127];
  11.   byte[] pText4 = new byte[127];
  12.   System.out.println("plain text needed len = " + plainText.length);
  13.   int ptLen1 = cipher.update(sig, 0, 54, pText1);
  14.   int ptLen2 = cipher.update(sig, 54, 54, pText2);
  15.   int ptLen3 = cipher.update(sig, 108, 54, pText3);
  16.   int ptLen4 = cipher.update(sig, 162, 55, pText4);
  17.   System.out.println("plain text len1 = " + ptLen1);
  18.   System.out.println("plain text len2 = " + ptLen2);
  19.   System.out.println("plain text len3 = " + ptLen3);
  20.   System.out.println("plain text len4 = " + ptLen4);
  21.   plainText = cipher.doFinal();
  22.   for (int i = 0; i < ptLen1; i++)
  23.    plainText[i] = pText1[i];
  24.   for (int i = 0; i < ptLen2; i++)
  25.    plainText[ptLen1+i] = pText2[i];
  26.   for (int i = 0; i < ptLen3; i++)
  27.    plainText[ptLen1+ptLen2+i] = pText3[i];
  28.   for (int i = 0; i < ptLen4; i++)
  29.    plainText[ptLen1+ptLen2+ptLen3+i] = pText4[i];
  30.   System.out.println("plain text content = " + new String(plainText));


 
Ce code ne marche pas ! L'erreur est : too much data for RSA block
causée à la ligne "int ptLen3 = ..."
 
Question :
 
D'où vient l'erreur ?
Décrypter en multipartie requiert-il d'encrypter (signer dans mon cas) en multipartie ?
Comment décrypter en multipartie une signature avec RSA ?
 
Merci :).
 
N.B. : tout exemple de code est bienvenue...je poursuis mes recherches sur google.


Message édité par Giz le 29-03-2007 à 11:04:24
Reply

Marsh Posté le 29-03-2007 à 11:00:21   

Reply

Marsh Posté le 29-03-2007 à 16:32:41    

Sans parler de mon code, plus généralement comment on fait le déchiffrement par block ??
 
- ou bien -
 
Peut-on générer une signature sur X bit seulement ? (afin de n'avoir à décrypter qu'un seul bloc)

Reply

Marsh Posté le 29-03-2007 à 16:52:15    

C'est bizarre quand même, j'ai toujours l'erreur "too much data for RSA block " sur cette ligne de code :
 
 

Code :
  1. int len2 = cipher.update(sig, len1, sig.length - blockSize, plainText, len1);


 
avec :
 
sig : un byte[] de taille 217
len1 : = 0 (je commence à lire sig à partir de 0)
sig.length - blockSize : 217-128 octects à lire (=89)
plainText : un byte[] de sortie
len1 : = 0 (où je commence à écrire dans le tableau de sortie.
 
Alors je ne comprends pas l'erreur car je lis moins d'un "blockSize" alors pourquoi cette erreur ??? :??:

Reply

Marsh Posté le 29-03-2007 à 17:14:15    

Je me suis fait une moulinette de "debug" :
 

Code :
  1. byte[] decryptedBytes;
  2.   for (int i = 0, j = 0; i < sig.length; i++) {
  3.    if ((decryptedBytes = cipher.update(sig, i, 1)) == null)
  4.     continue;
  5.    else {
  6.     System.out.println(new String(decryptedBytes));
  7.     System.arraycopy(decryptedBytes, 0, plainText, j, decryptedBytes.length);
  8.     j += decryptedBytes.length;
  9.    }
  10.   }


 
Le else n'est jamais executé  :heink: ... kkchose de zarbi...
J'ai encore et toujours l'erreur : "too much data for RSA block" sur l'instruction update
Je pars poster sur le forum Java - Cryptographie.


Message édité par Giz le 29-03-2007 à 17:17:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed