Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2788 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1535665
Giz
Posté le 29-03-2007 à 11:00:21  profilanswer
 

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
mood
Publicité
Posté le 29-03-2007 à 11:00:21  profilanswer
 

n°1535930
Giz
Posté le 29-03-2007 à 16:32:41  profilanswer
 

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)

n°1535952
Giz
Posté le 29-03-2007 à 16:52:15  profilanswer
 

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 ??? :??:

n°1535974
Giz
Posté le 29-03-2007 à 17:14:15  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[Java] Générer un hash MD5Pourquoi tout n'est pasobjet dans java ?
[Java] lecture d'un fichier : y'a un lézard quelque part...[Java] WorkSpace Eclipse: lecteur réseau possible?
Java video event detectionPb d'accent et autres Java - Oracle
ergonomie ecran et code javaJava Applet - Télécharger/Uploader un fichier
java : appeler des methodes d'un programme en CConseils pour imprimer en Java : quel est l'API ultime ?
Plus de sujets relatifs à : [Java - Cryptographie] Décryptage RSA par block (multipart decryption)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR