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

C++ Discussion :

La cryptologie RSA en C++ quelqu'un connait ?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 165
    Points : 193
    Points
    193
    Par défaut La cryptologie RSA en C++ quelqu'un connait ?
    Bonjour,

    en ce moment j'essaie de faire de la cryptologie en C++ ( RSA, blowfish )

    une libraire open source semble faire reference, c'est crypto++ :

    http://www.eskimo.com/~weidai/cryptlib.html

    mais le gros inconvénient c'est la doc qui est d'une pauvreté extreme, elle ne fait que lister les classes et les méthodes sans vraiment expliquer à quoi elles servent, il n'y a même pas d'exemple tout bête, et les classes sont difficilement compréhensibles et intuitives

    en fait c'est destiné à des gens qui maitrisent completement la cryptologie et les subtilités du C++

    je viens du monde Java et là-bas il y a un package pour la cryptologie ( JCE ) extremement claire et documenté, je n'avais eu aucun soucis à crypter une simple chaine en RSA par exemple

    là mon soucis c'est que je n'arrive pas à décrypter un tableau de byte avec la technologie RSA avec cette librairie crypto++, ma clé privée est bien chargée mais il n'arrive pas à décrypter, j'ai une exception qui me dit "invalid ciphertext" ,

    donc j'aimerai savoir si il y a un pro dans ce forum C++ qui maitrise crypto++ et qui pourrait m'aider ?

    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
     
    std::string Crypto::RSADecryptString( const char *privFilename, const char *ciphertext){
     
            //on charge la clé privée depuis une chaine hexa
    	StringSource privFile(privFilename, true, new HexDecoder);
    	RSAES_OAEP_SHA_Decryptor priv(privFile);
     
              //on decrypte une string qui a été préalablement cryptée en RSA
            RandomPool randomPool;
    	string result;
          	StringSource(ciphertext, true, new HexDecoder(new PK_DecryptorFilter(randomPool, priv, new StringSink(result))));
    	return result;
     
            /*ça plante à ce niveau, lorsqu'on tente de décrypter la chaine ciphertext hexa, pourtant la clé privé est acceptée, je ne comprend pas, car le ciphertext et la clé privé ont été generé sous Java avec JCE */
    }
    le gros problème c'est le manque de documentation sur le net de cette libraire crypto++

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Si c'est généré sous Java pas étonnant que cela plante.
    Parce que pour la bonne et unique raison qu'un int n'a pas la même taille en octets qu'un int en C++ !
    Les formats de données au niveau binaire ne sont pas forcéments les mêmes pour chaque langage.
    Il faut passer par un fichier texte intermédiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    StringSource(ciphertext, true, new HexDecoder(new PK_DecryptorFilter(randomPool, priv, new StringSink(result)))); 
       return result;
    Décomposer cette fonction StringSource plutot que tout cascader et mettre des points d'arrêts et passer en mode pas a pas

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 165
    Points : 193
    Points
    193
    Par défaut
    Ben en fait j'ai fait attention à ce point, ma clé privée est stockée sous forme binaire dans un fichier generé par Java,

    idem pour le fichier ciphertext, un fichier binaire generé par Java

    comme test en C++ j'ai veillé à recuperer octet par octet le contenu de ces fichiers , puis à les réengistrer sous forme de fichiers binaire sur le disque,

    ensuite j'ouvre ces fichiers avec un éditeur hexadécimal afin de voir si ce sont les mêmes octets, et là je constate que c'est Ok, le C++ arrive bien à recuperer et interpreter correctement les valeurs binaires de la clé et du ciphertext

    ensuite je mets tout ça dans un tableau de char, je transforme ça en chaine hexadecimal representant ces octets ( privFilename, ciphertext), ce sont ces valeurs qui sont passés à la fonction de décryptage pour CryptoPP,

    il arrive bien à charger ma clé privé ( preuve que c'est ok au niveau integrité de la clé car avec une clé erronée non RSA il y a une exception qui est levée )

    ça plante lors du moment du décryptage du ciphertext

  4. #4
    mat.M
    Invité(e)
    Par défaut
    le problème avec char * c'est que c'est un type de données avec lequel on a des plantages à coup sur s'il est mal utilisé

    Comment est initialisé const char *ciphertext ?

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 165
    Points : 193
    Points
    193
    Par défaut
    Il est bien initialisé, car j'arrive à le faire afficher sur la console dans cette méthode de décryptage

    il est possible en fait que mon programme Java fasse un mauvais cryptage RSA, un truc non standard ce qui peut expliquer pourquoi CryptoPP n'arrive à pas à décrypter le ciphertext

    pourtant j'ai utilisé le code source de cryptage RSA fourni sur ce site dans la FAQ Java

    http://java.developpez.com/sources/?page=cryptage#rsa

    ftp://ftp-developpez.com/java/sources/MyRSA.java

    car lorsque je crypte/décrypte avec des valeurs venant directement du programme C++ ( crypto++ ) en utilisant le fichier de test ( test.cpp fourni avec crypto ) là il n'y a pas d'erreur



    c'est uniquement en tentant de décrypter quelque chose qui a été crypté en java que ça plante, il ne reconnait pas le ciphertext

Discussions similaires

  1. [UNO] (open office) quelqu'un connait ?
    Par mimi31110 dans le forum Documents
    Réponses: 6
    Dernier message: 24/05/2006, 11h32
  2. Quelqu'un connait le SSI en include ?
    Par miltonis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/11/2005, 09h21
  3. Quelqu'un connait ce soft ?
    Par pc75 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 15/11/2005, 16h34
  4. Quelqu'un connait un bon logiciel?
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 17/05/2005, 20h40
  5. Quelqu'un connait PROGRESS?
    Par sandrine dans le forum Autres SGBD
    Réponses: 23
    Dernier message: 07/05/2004, 11h29

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