IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

RSA : Too much data for RSA block


Sujet :

Sécurité Java

  1. #1
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut RSA : Too much data for RSA block
    Bonjour tout le monde,

    J'ai un petit soucis de chiffrement RSA.

    Je me fabrique une clé RSA à partir de données récupérée d'un autre soft qui a généré ses clés grâce au m et e :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BigInteger m = new BigInteger(parts[0]);
    BigInteger e = new BigInteger(parts[1]);
    RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);
    KeyFactory fact = KeyFactory.getInstance("RSA");
    PublicKey pubKey = fact.generatePublic(keySpec);
    J'essaie ensuite de chiffre des données grâce au code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public byte[] encrypt(byte[] input, PublicKey pubKey) {
    		try {
    			Cipher cipher = Cipher.getInstance("RSA");
    			cipher.init(Cipher.ENCRYPT_MODE, pubKey);
    			return cipher.doFinal(newInput);
    		} 
    		catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    Mais sur la ligne doFinal, j'obtiens toujours une exception :
    ArrayIndexOutOfBoundsException: too much data for RSA. block.

    Une idée d'où cela peut provenir ?

    Merci d'avance pour votre aide !!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Serait-il possible que ta question soit la même que celle de ce sujet : http://www.developpez.net/forums/d92...-tableau-byte/ ? (si on fait abstraction de ma grossière erreur de vocabulaire, mon propos n'est pas complètement abhérant )

    A plus

  3. #3
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    J'ai essayé de chiffrer "hello".getbytes avec une clé 2048, donc on dirait pas que ce soit le problème non ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PoZZyX Voir le message
    J'ai essayé de chiffrer "hello".getbytes avec une clé 2048, donc on dirait pas que ce soit le problème non ?
    Ben avec le code que tu donnes, dur de deviner. Tu aurais pas par hasard la stacktrace complète et les entrées exactes ? Quelle est la différence entre input et newInput ?
    Dernière modification par Invité ; 01/07/2010 à 22h42.

  5. #5
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Ok mea culpa j'avais fait une erreur ailleurs.

    Désolé du dérangement et encore merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 10
    Points
    10
    Par défaut too much data for RSA block
    bonsoir;
    j'utilise la cryptographie avec Bouncy Castle.
    Je voudrais échanger des informations cryptés entre un client/serveur.
    pour le cryptage coté client pas de problème, mais pour le décryptage coté serveur j'ai un message d'erreur:
    client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    String message="blablablablabla";
    Socket sc=new Socket("127.0.0.1",5435);
    PrintWriter fout=new PrintWriter(new OutputStreamWriter(sc.getOutputStream()));
    try{
    Cipher cipherencrypt = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
    cipherencrypt.init(Cipher.ENCRYPT_MODE, publickeyclient);
     
    byte[] encrypted = cipherencrypt.doFinal(message.getBytes());
    String messagecrypté =new String(encrypted);
    fout.write(messagecrypté );
     
     fout.close();
     } catch (Exception e) {
    }
    coté serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    BufferedReader fin=new BufferedReader(new InputStreamReader(socketserver.getInputStream()));
    			String messagecrypte=fin.readLine();
                         byte [] encrypted2=messagecrypte.getBytes();
    try{
    Cipher cipherdecrypt = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
     
    cipherdecrypt.init(Cipher.DECRYPT_MODE, privatekeyclient);
     
     
     
    byte[] decrypted = cipherdecrypt.doFinal(encrypted2);
     
     System.out.println("message décrypter :"+new String(decrypted));
     
                        fin.close();
                        sc.close();
    un message d'erreur afficher sur l'écrant est:
    java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
    at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(Unknown Source)
    at javax.crypto.Cipher.doFinal(Cipher.java:2086)
    at clientserveur.Requette.run(Serveur.java:179)
    merci.

  7. #7
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    RSA ne sert pas à chiffrer les données elles-mêmes mais la clef de session d'un algorithme symétrique (3DES, AES, etc ...).
    RSA est donc limité en taille des données à chiffrer. Ici ce n'est pas exactement ton soucis mais tu ne prends pas le bon chemin pour résoudre ton problème.

    Puisque tu utilises BouncyCastle je t'invite à trouver ce livre : "Beginning Cryptography with Java" de David Hook, édité chez Wrox et à le lire entièrement.

    Tu peux dès maintenant télécharger les exemples de sources fournis dans le livre ici. Ton problème est détaillé au chapitre 10 (package chapter10) dans les fichiers Utils.java (tu auras besoin des classes filles (chapter9.Utils qui dérive lui même de chapter8.Utils etc ...)), CreateKeyStores.java, SSLClientExample.java et enfin SSLServerExample.java.

    En gros il y a des classes d'abstraction permettant d'effectuer le chiffrement côté client et le déchiffrement côté serveur en quelques lignes de code sans avoir à manuellement écrire chaque ligne. Comprendre par là que tu n'as pas besoin de générer manuellement la clef de session, puis chiffrer avec l'algo symétrique, puis chiffrer avec RSA la clef, etc ... Tout ça est géré par des classes comme SSLSocket.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    merci pour votre aide,
    j'ai résolu le problème merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Too much recursion après un alert
    Par beegees dans le forum Général JavaScript
    Réponses: 31
    Dernier message: 07/02/2014, 07h32
  2. Neighbour table overflow et eth0:Too much work at interrup, status=0x5040
    Par mabdou dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 12/03/2009, 10h31
  3. Réponses: 2
    Dernier message: 26/02/2009, 11h23
  4. [phpBB] Could not get theme data for themes_id
    Par leech2004 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/09/2007, 15h18
  5. Error:Too much global data defined in file
    Par Morosh dans le forum C++
    Réponses: 5
    Dernier message: 24/02/2005, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo