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 :

Saisie de mot de passe en c++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Saisie de mot de passe en c++
    Bonsoir
    En effet j'ai un petit problème j'arrive pas a coder une gestion de mot de passe avec getch(); je voudrais que le mot de passe soit une chaine de caractère mais je n'arrive qu'a stocker qu'un caractère.

    Merci D'avance pour vos réponses

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par moudjames23 Voir le message
    Bonsoir
    En effet j'ai un petit problème j'arrive pas a coder une gestion de mot de passe avec getch(); je voudrais que le mot de passe soit une chaine de caractère mais je n'arrive qu'a stocker qu'un caractère.
    En un mot, c'est normal, vu que getch() est une fonction qui n'est prévue que pour lire un seul caractère à la fois... Il devient difficile d'espérer en obtenir plusieurs dans de telles conditions (du moins, sans passer par une boucle) .

    Notes au passage que
    1. la fonction getch() n'est pas une fonction C++, mais bien une fonction C
    2. la fonction getch() n'est absolument pas standard, même en C et est donc à considérer comme "non portable".

    Le gros problème, c'est qu'il n'existe de toutes manières rien de standard pour éviter l'affichage des caractères saisis au travers de std::cin

    La seule solution que j'aie trouvée jusqu'à présent qui puisse éviter le recours à getch ressemble à quelque chose comme
    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
     
    #include <iostream>
    #include <string>
    #ifdef WIN32
    #include <windows.h>
    #else
    #include <termios.h>
    #include <unistd.h>
    #endif
    void setStdinEcho(bool enable = true)
    {
    #ifdef WIN32
        HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
        DWORD mode;
        GetConsoleMode(hStdin, &mode);
     
        if( !enable )
            mode &= ~ENABLE_ECHO_INPUT;
        else
            mode |= ENABLE_ECHO_INPUT;
     
        SetConsoleMode(hStdin, mode );
     
    #else
        struct termios tty;
        tcgetattr(STDIN_FILENO, &tty);
        if( !enable )
            tty.c_lflag &= ~ECHO;
        else
            tty.c_lflag |= ECHO;
     
        (void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
    #endif
    }
    int main()
    {
        std::string password;
        setStdinEcho(false);
        std::cout<<"introduisez votre mot de passe (il sera caché):";
        std::cin>>password;
        std::cout<<"\nvous avez introduit "<<password<<std::endl;
        setStdinEcho();
        std::cout<<"maintenant la saisie apparait a l'écran"<<std::endl
                 <<"reintroduisez votre mot de passe pour\n "
                 <<"le voir apparaitre :";
        std::cin>>password;
        return 0;
    }
    Ce n'est toujours pas standard, vu que l'on manipule directement l'API système, mais c'est quand même beaucoup plus correct que l'utilisation de getch
    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
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci merci merci koala01
    je vais me donner a fond pour comprendre ton code
    Merci beaucoup

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par moudjames23 Voir le message
    Merci merci merci koala01
    je vais me donner a fond pour comprendre ton code
    Merci beaucoup
    A vrai dire, à part les #ifdef #else #endif, je crois qu'il ne sert pas à grand chose d'essayer de comprendre.

    En gros, si tu es sous windows, il faut veiller à inclure le fichier windows.h afin de pouvoir profiter de l'API de window et jouer avec GetConsoleMode, SetConsoleMode et autre HANDLE.

    Si tu es sous linux, il faut inclure le fichier d'en-tête termios.h afin de pouvoir jouer avec tcgetattr, tcsetattr et autres termios.

    Une fois que cette fonction est codée, tu la places dans ta boite à outils personnelle et tu te dépêches de l'oublier (du moins, d'en oublier le code) jusqu'à la prochaine fois où tu seras confronté à un problème similaire .
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci Merci vrement koala01

Discussions similaires

  1. Réponses: 10
    Dernier message: 23/05/2007, 09h30
  2. Saisie de mot de passe
    Par jonny_the_dog dans le forum C++
    Réponses: 1
    Dernier message: 12/01/2007, 00h27
  3. Pb de sécurité, de saisie de mot de passe
    Par gui38 dans le forum Sécurité
    Réponses: 4
    Dernier message: 06/06/2006, 10h45
  4. [Forum] Saisie de mot de passe pour login
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 24/04/2006, 16h39
  5. cacher la saisie du mot de passe
    Par Antoine_1977 dans le forum Modules
    Réponses: 5
    Dernier message: 23/09/2005, 18h13

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