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 :

Cryptage RSA d'un string


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut Cryptage RSA d'un string
    Salut à tous =D

    Voilà, cela fait deux jours que je cherche comment réaliser un cryptage d'un string en RSA :/ J'ai trouver une lib qui semblait convenir :

    => http://www.chilkatsoft.com/default.asp
    => http://www.example-code.com/vcpp/rsa_encryptStrings.asp

    J'ai donc essayer mais je me suis rendu compte que le fait de passer de string a const char * me faisait perdre des octets. Même en faisait maString.c_str(), j'ai remarqué que certains sautait, et moi qui ait tout en string, ca m'embete etant donné que la clé est aussi en string.

    Du coup j'aimerai savoir comment réglé ce problème, où simplement si une autre lib semblait plus adaptée =)

    Merci ^^

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    C'est étrange, peux-tu nous donner l'hexadécimal des octets qui sautent ?

    As-tu essayé avec maString.data() ?

    Sinon je ne vois pas d'autres méthodes de string qui pourrait t'aider.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    En fait, ma clé de départ fait ça :
    30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 AC 70 A8 1B 90 23 DF 43 5D 1B 05 39 0C 67 9D 15 42 50 4D 2F A2 93 3E DF F2 9A 7B 9B EF B1 C6 7B 6D 71 B9 30 55 9F 88 90 B3 C9 B5 80 50 04 AE 9E 1F 32 FB D2 39 CB C8 11 62 51 0F 93 AD FE FC A2 B5 98 A5 86 2D 87 16 B9 0A 80 95 C0 00 A2 0B 0C C1 A0 59 2E 13 48 B7 5D A0 BB 3B 06 E4 4A 17 6D 4E 33 84 DB 99 C1 33 6F F5 53 9F 23 BA 40 B3 51 9E 7A 1B 49 6A 2A B4 17 9C E2 19 1C E7 39 1B 86 AF 00 DE 5D 80 AB BB 9F 5A 65 26 F9 FD 9B CA 72 17 6A EE FB BC AE 0E EE 35 10 EF F0 C1 07 C2 F2 DE 7F 1F A1 4C 6C 65 98 BD EF 17 7C E6 27 1D B5 17 D8 50 9D 34 DF 8C D1 1D 73 40 89 0F 7E 5B D5 E5 F2 7B C2 5C 97 FD 34 7A 76 C6 EB 9E 6F 4C C7 D2 10 10 D6 06 0F 33 4C 10 35 A9 E0 0A D1 D9 B0 8B E8 03 39 CA 7B FB 35 77 F9 C7 BD 49 3E B8 F1 A1 E8 8B 7D 1E 0E A9 36 CC 4C 77 02 96 F0 7B DB 02 03 01 00 01
    Et une fois passer en BYTE* ou char*, je me retrouve avec ca :

    30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05
    Ou alors quand je le rentre en dur avec un for, j'ai l'impression d'avoir des valeur completement aléatoires :'(

    Des idées ?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    00 marque la fin d'une chaîne de caractère donc si tu fait un printf, tu ne verras pas la suite.


    De plus, ce n'est pas sûr qu'il copie bien ce qu'il y a derrière l'octet 0x00

    Je pense que le mieux est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    std::string monString;
     
    int taille = monString.size();
    char * monChar = new char[taille];
     
    std::string::iterator p = monString.begin();
    std::string::const_iterator const fin = monString.end();
     
    char * tmp = monChar;
    while(p != fin)
                *tmp++ = *p++;
    Par contre tu ne pourras pas utiliser les fonctions de string.h sur ton char *.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    J'avais penser au coup du 0x00 marquant la fin ma chaine de départ est stocké dans un tableau d'unsigned char *.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Avec des unsigned char * ou des char *, c'est le même problème, '\0' est considéré comme la fin de la chaîne de caractère.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Oui mais la j'ai une clé en Unsigned, et pour la passé en signed, ca risque de faire foirer le chiffrement non ?

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour faire la conversion signed <=> unsigned, il me semble que les octets ne sont pas modifiés vu qu'on utilise du codage complément à 2 pour les signed.

    Après ça dépend de l'algorithme utilisé derrière.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Étonnant, un char étant codé de -128 à 127, je me demande comment on pourrait y mettre un unsigned sachant qu'il va de 0 à 255
    Après, j'ai toujours un résultat étrange, j'ai l'impression de ne rien encrypté du tout x)

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Unsigned char :
    -128 = 0x80;
    -128 = 0 - 128;

    - 1 = 0xFF;
    -1 = 0 - 1;

    Char :

    128 = 0x80;
    128 = 256 - 128 = 0 - 128

    255 = 0xFF;
    255 = 256 - 1 = 0 - 1

    Ne pas oublier que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unsigned char uc = 255;
    uc++; // uc = 0;
    uc--; // uc = 255
     
    char c = 128;
    c++; // c = -127
    c--; // c = 128
    En fait avec les unsigned char, la valeur sera x modulo 256
    Et avec les char, la valeur sera : ( ( (x +127)modulo 256 ) - 127 )
    Avec x une valeur quelconque.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Donc si j'utilise une clé que je reçoi en unsigned en la convertissant en const char * ca devrait fonctionner ?

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Il faut faire attention car si dans ton algorithme tu as des comparaisons (>, <, <=, >=, !=, == ) prévue pour des unsigned, il peut y avoir des problèmes si tu utilises des signed, il faudrait mettre des if( (unsigned char)monChar < 4) pour éviter ces problèmes

    Sinon, passer de l'un à l'autre ne devrait pas poser de problème.

    Mais rappelles-toi bien que tu ne pourras pas utiliser toutes les fonctions de string.h ainsi que les fonctions printf puisque tu as 0x00 au milieu de ton tableau.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Je vais aller voir du côté de openSSL apparemment, il fait ca aussi, et ca a l'air plus pratique, reste plus qu'a configurer Qt Creator pour utilise ropenSSL x)

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour configurer Qt Creator c'est très simple :
    Tu modifie le .pro.user (apparait en .pro quand tu ouvres un projet) et tu rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LIBS += -lmysqlclient \
        -lsfml-graphics \
        -lsfml-network
    Bon ça c'est pour la SFML pour openSSL ça doit être très similaire.

    EDIT : j'ai trouvé ceci : -ldl -lssl -lcrypto

    ça donnerait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LIBS += -ldl \
          -lssl \
          -lcrypto

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Re =)

    Voilà, j'ai fini par passer sous fedo xD Du coup forcément tout marche impec, et du coup, je repars sur mon chiffrement.

    J'ai donc ma chaine et ma clé. Du coup, j'ai tout x) Enfin, croyais-je jusqu'à mes tests x)

    J'ai vu un fonction sympa à savoir RSA_public_encrypt => http://www.openssl.org/docs/crypto/rsa.html#
    http://www.openssl.org/docs/crypto/R..._encrypt.html#

    Malheureusement, ça marche pas aussi bien que je l'aurais espérer.
    Voilà comment je l'utilise :

    RSA_public_encrypt(strlen(from), from, to, rsa, RSA_PKCS1_PADDING);

    from étant ma clé, to ma chaine a crypter, rsa, un simple RSA * que j'ai initialiser a RSA_new(); et RSA_PKCS1_PADDING un define.

    Et ca segfault, valgrind me donne un segfault par invalid read :'( Il doit aller trop loin en mémoire, mais ça se passe dans la lib crypto :/

    Des idées ?

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    from est bien un (unsigned) char * contenant des octets à 0x00 ?
    Si oui, strlen(from) ne te donnera pas la taille de from mais le nombre de caractère jusqu'au premier octet à 0x00.

    Peux-tu nous montrer ta fonction complète stp?

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    En fait, j'avais un string de base, et du coup, je fais ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (int i = 0; i < maString.size(); i++)
        from[i] = maString[i];
    RSA_public_encrypt(maString.size(), from, to,rsa , RSA_PKCS1_PADDING);

  18. #18
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Et tu as alloué comment l'espace nécessaire pour to?

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char *from = new unsigned char[maString.size()];
    Idem pour to.
    Tout simplement =)

    Edit : je l'utilise mal, from doit etre la chaine a encrypter, et to une chaine vide qui sera rempli, mais je dois trouver comment mettre la clé dans rsa, j'avais mal compris cette fonction ^^

  20. #20
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour to ce n'est pas : char * to = new unsigned char[RSA_size(rsa)]; ?

Discussions similaires

  1. Cryptage rsa sous Delphi
    Par hocine77 dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2010, 18h30
  2. Algorithm de cryptage RSA
    Par aocaoc dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/12/2007, 18h26
  3. cryptage Rsa coté mobile et decryptage coté serveur
    Par Tunisia dans le forum Sécurité
    Réponses: 1
    Dernier message: 11/08/2007, 10h44
  4. Le cryptage RSA
    Par h_raf dans le forum C
    Réponses: 1
    Dernier message: 21/04/2007, 23h16
  5. [VB.NET2.0] cryptage RSA avec clef privée
    Par AP dans le forum Framework .NET
    Réponses: 4
    Dernier message: 17/04/2007, 15h35

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