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

SL & STL C++ Discussion :

Comment crypter une chaîne de caractères ?


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut Comment crypter une chaîne de caractères ?
    Bonjour à toutes et à tous,

    mon problème de la semaine est de crypter une chaîne de caractères...
    Cependant, la petite difficulté est qu'une fonction doit prendre en argument cette chaîne crypter et savoir l'utiliser.

    Connaitriez-vous un tutoriel sur ce sujet ou bien une fonction adéquat en C++ ?

    Je vous remercie.
    Seinen.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il faudrait déjà savoir le genre de cryptage que tu souhaites effectuer...

    Le "plus simple" (comprend: celui qui sera le plus facile à appliquer, mais qui sera aussi le plus facile à "cracker") est le cryptage de Cesar ou une de ses variantes:

    Tu choisi une "clé" numérique, par exemple 1597, puis tu boucle sur chaque caractère de ta chaine en ajoutant 1 au premier caractère, 5 au deuxième, 9 au troisième 7 au quatrieme et en recommençant avec les caractères suivant jusqu'à ce que tu aie parcouru l'ensemble de la chaine d'origine.

    Pour la décrypter, il "suffit" de faire le mouvement inverse: retrancher 1 au premier caractère, 5 au deuxième, 9 au troisième, 7 au quatrième en recommancant jusqu'au bout.
    (à vrai dire, César se contentais de décaler, pour un même message, ses lettre d'une valeur toujours égale )

    D'autres méthodes de cryptages existe, dis nous laquelle "t'inspire" et nous te dirons comment y arriver
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    En cherchant sur le net on trouve cette biblio : http://www.cryptopp.com/

    Ca dépend de ce que tu veux faire mais la tu as les algos les plus utilisés (AES,RSA)

    NB : Je ne l'ai jamais utilisée

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Le "plus simple" (comprend: celui qui sera le plus facile à appliquer, mais qui sera aussi le plus facile à "cracker") est le cryptage de Cesar ou une de ses variantes:
    Ca dépend de la longueur de la clé.

    Y'a aussi un cryptage avec une double clé (ou plus). En général on préfère choisir 2 mots clés plutôt que des nombres (par commodité pour s'en souvenir) et on associe à chaque lettre un nombre (A=1, B=2..., ou bêtement le code ASCII)
    Le tout étant de prendre des clés dont les longueurs respectives sont premières entre elles, ainsi on a quasiment l'équivalent d'une grande clé dont la longueur correspond au produit des longueurs des petites clés.
    A ma connaissance, c'est l'un des rares cryptages simples pratiquement incassable.

    Sinon, c'est clair qu'il y plus costaud comme cryptage (J'ai eu des cours la dessus, mais ça remonte à une paire d'années.) . La notion de clé publique est sympa aussi...

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    En fait, dans mon programme, j'ouvre un répertoire situé sur un serveur. Le chemin est pour le moment en dur (par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin[]= \\\\mon_serveur\\Seinen\\mon_projet;
    ).

    Ce que je souhaite c'est crypter le code de mon programme pour ne plus faire apparaître ce chemin lorsqu'on essaye de bidouiller l'exécutable.
    Je suis entrain de réfléchir tout en écrivant, et je pense que finalement, il me faudrait plutôt crypter le code plutôt que simplement le chemin...

    Je n'avais pas précisé, mais j'utilise Visual Studio et je peux utiliser toutes les fonctions MFC.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Seinen Voir le message
    Pourquoi cela n'existerait plus ?
    Parce que MFC, c'est pas terrible terrible et ca devrait disparaitre
    Mais bon, on ne choisie pas toujours.

    Si j'ai bien compris, tu veut juste que \\\\mon_serveur\\Seinen\\mon_projet; ne soit pas visualisable dans ton executable?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Oui c'est exactement ça.
    Pour le moment il est en dur dans le code source et je cherche un moyen de soit le faire disparaître, soit de le brouiller lorsque l'on ouvre l'exécutable.

    Sachant que je dois aussi l'utiliser pour aller ouvrir un répertoire... Et c'est ce dernier point qui me fait mal à la tête (comment allez ouvrir un répertoire si le chemin est crypté ?).

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Donc a mon avis, tu n'as pas besoin d'un truc supercompliqué.
    Un simple xor ou un neg sur ta chaîne devrait suffire.
    http://tuxy2885.free.fr/index.php?cat=tutorial&id=crypt

    Ce qu'il faut, c'est que la ligne
    chemin[]= \\\\mon_serveur\\Seinen\\mon_projet;
    contienne le path déjà crypté. Ensuite tu décrypte pendant l'exécution.

    Voici un exemple à peu prés similaire. J'utilise "essai rapide" qui est crypté. Si tu regarde l'exe généré, tu ne trouve rien
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <iterator>
     
    //foncteur de decriptage
    struct f_decript
    {
        f_decript( unsigned char key): m_key(key){}
        unsigned char operator()(unsigned char & c)
        {
           return  c^m_key;
        }
        //clef a utiliser
        const unsigned char m_key;
    };
     
    int main()
    {
        std::vector<unsigned char> crypt_path;
        unsigned char key =00101101;//clef ecrit en binaire :0xxxxxx avec x =0 ou 1
        crypt_path.push_back('e'^key);//un peu chiant
        crypt_path.push_back('s'^key);
        crypt_path.push_back('s'^key);
        crypt_path.push_back('a'^key);
        crypt_path.push_back('i'^key);
        crypt_path.push_back(' '^key);
        crypt_path.push_back('r'^key);
        crypt_path.push_back('a'^key);
        crypt_path.push_back('p'^key);
        crypt_path.push_back('i'^key);
        crypt_path.push_back('d'^key);
        crypt_path.push_back('e'^key);
        //affichage sous forme de caratère
        std::copy(crypt_path.begin(),crypt_path.end(),std::ostream_iterator<unsigned char>(std::cout," "));
        std::cout<<std::endl;
        //affichage sous forme hexa
        std::copy(crypt_path.begin(),crypt_path.end(),std::ostream_iterator<unsigned int>(std::cout<<std::hex," "));
        std::cout<<std::endl;
     
        std::string path;
        //decriptage avec un foncteur
        std::transform(crypt_path.begin(),crypt_path.end(),std::back_inserter(path),f_decript(key));
        //affichage du path
        std::cout<<path<<std::endl;
     
        return 0;
    }
    Comme j'utilise les algo :
    http://r0d.developpez.com/articles/algos-stl/

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    C'est la deuxieme requete d'obfuscation de données (serveur, compteur) en 1 semaine...
    Je me demande bien quelle est cette nouvelle lubie...

    Tiens... pour le serveur, tu peux t'embêter 10 ans à crypter ta chaine, dès que tu vas l'utiliser (pour te connecter au serveur... même si je doute que \\\\xxxxx\\jjjj marche bien ), ca va apparaitre en gros sur tous les firewalls du gars, donc absoluement aucun interêt...

    Le chemin du fichier ? Visible dans les ouvertures handle avec le chemin complet...

    De toute manière je vois vraiment pas l'interêt de cacher un chemin d'accès...

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Le chemin du fichier ? Visible dans les ouvertures handle avec le chemin complet...
    Oui mais ça c'est à l'exécution et faut savoir le faire.
    Pour une raison x ou y il veut que l'on ne voit pas ce path en ouvrant l'exe dans un éditeur...

    Citation Envoyé par nicroman Voir le message
    De toute manière je vois vraiment pas l'interêt de cacher un chemin d'accès...
    Y as toujours moyen d'en trouver une

  11. #11
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Un simple xor ou un neg sur ta chaîne devrait suffire.
    http://tuxy2885.free.fr/index.php?cat=tutorial&id=crypt

    Ce qu'il faut, c'est que la ligne
    chemin[]= \\\\mon_serveur\\Seinen\\mon_projet;
    contienne le path déjà crypté. Ensuite tu décrypte pendant l'exécution.
    Merci Mongaulois pour les chemins et l'exemple, je vais essayer ça.

    Citation Envoyé par nicroman
    C'est la deuxième requête d'obfuscation de données (serveur, compteur) en 1 semaine...
    Je me demande bien quelle est cette nouvelle lubie...
    Ce n'est pas à moi qu'il faut demander, je ne suis qu'un simple stagiaire qui exécute ce qu'on lui demande .

    Citation Envoyé par nicroman
    ça va apparaitre en gros sur tous les firewalls du gars, donc absolument aucun intérêt...
    Comme le disait Mongaulois, je veux juste que le chemin soit invisible dans mon exécutable quand tu l'ouvres avec NotePad++, par exemple.

    Citation Envoyé par nicroman
    De toute manière je vois vraiment pas l'intérêt de cacher un chemin d'accès...
    Si si, je t'assures qu'il y en a une, je ne le demande pas pour embêter le monde (quoique...)

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    En y réfléchissant, faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::string path;
    path.push_back('e');
    path.push_back('s');
    path.push_back('s');
    path.push_back('a');
    path.push_back('i');
    path.push_back(' ');
    path.push_back('r');
    path.push_back('a');
    path.push_back('p');
    path.push_back('i');
    path.push_back('d');
    path.push_back('e');
    suffit peut être, je crois que je me suis un peu enflammé

  13. #13
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Mongaulois
    je crois que je me suis un peu enflammé
    Lol, peut-être. Cependant, je pense que niveau cryptage et d'un point de vue sécurité, rien n'est trop compliqué ^^.

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Seinen Voir le message
    Comme le disait Mongaulois, je veux juste que le chemin soit invisible dans mon exécutable quand tu l'ouvres avec NotePad++, par exemple.
    Oui j'ai bien compris....
    Mais encore une fois:
    - ou bien ce chemin est utilisé par l'executable et il apparaitra en gros dans le systeme que tu l'obfusques ou non
    - ou bien ce chemin n'est pas utilisé par l'executable et il n'y a pas à l'inclure dedans

Discussions similaires

  1. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  2. Réponses: 4
    Dernier message: 22/12/2006, 15h10
  3. Réponses: 1
    Dernier message: 01/11/2006, 19h20
  4. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 09h58
  5. Réponses: 5
    Dernier message: 15/02/2005, 18h07

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