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 :

Cacher la saisie


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Cacher la saisie
    Bonjour,

    est ce que qlq'un peut me dire comment cacher la saisie.
    j'ai besoin de taper un password dans la console mais je ne veux pas qu'il soit visible.
    est ce qu'il y a une fonction qui le permet ? si oui laquelle?

    merci de votre aide.

    NB: problème bloquant.

  2. #2
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut Re: Cacher la saisie
    Citation Envoyé par basbasa
    Bonjour,

    est ce que qlq'un peut me dire comment cacher la saisie.
    j'ai besoin de taper un password dans la console mais je ne veux pas qu'il soit visible.
    est ce qu'il y a une fonction qui le permet ? si oui laquelle?

    merci de votre aide.

    NB: problème bloquant.
    Ca depend du systeme sur lequel tu travailles. Je ne connais pas de soution portable pour ca.

    Sur Unix/Linux, utilisation de ioctl() (man 2 ioctl):

    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
     
    #include <sys/termios.h>
    #include <sys/ioctl.h>
    #include <stdlib.h>
     
    int                     main(void)
    {
      struct termios        line_police;
      char                  c;
     
      if (ioctl(0, TIOCGETA, &line_police) < 0)
        {
          perror("Oh oh");
          exit(1);
        }
      line_police.c_lflag &=  ~(ECHO);
      if ((ioctl(0, TIOCSETA, &line_police)) < 0)
        {
          perror("Oh, oh");
          exit(2);
        }
     
    /*
    ** Ton code ici
    */
     
    return (EXIT_SUCCESS);
    }
    Pour remettre l'echo, fais une sauvegarde de la configuration precedente, puis restitue la avec un nouveau ioctl(0, TIOCGETA, &line_police;.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour et bienvenue sur le forum

    En C standard ceci n'est pas possible, il faudrait que tu nous dise quel OS tu utilise.

    Sous Linux avec ncurses, j'ai une sources sous la main :
    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
    #include <stdlib.h>
     
    //Saisit une ligne terminée par [Entrée] comme chaîne C, en masquant l'entrée.
    //Renvoie la longueur de l'entrée.
    size_t getpassword(char *pbuff, size_t buffsize, char mask){
        char *pcur= pbuff;
        for( ; buffsize>1 ; --buffsize){
           *pcur= getch();
           if(*pcur=='\r') break;
           putch(mask);
           pcur++;
        }
        *pcur= '\0';
        return pcur-pbuff;
    }
    S'ils n'ont pas été supprimés, il doit avoir quelques sujets qui répondent à ta question sur ce forum (recherche le mot clés 'pendu', oui oui comme le jeux si mes souvenirs sont bon).

    Bon courrage

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci à vous.

    Au fait j'utilise mon programme sous dos, j'essaye de faire un simulateur d'une cosole unix, et je fait un printf("$pwd:");
    et un scanf("%s",pwd); mais la saisie n'est pas caché avec le scanf.

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Il suffit de faire une saisie caractère par caractère avec une fonction de type getch() (attention je crois que celle là n'est pas portable) en boucle.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    bonjour,

    j'ai essayé getch() mais rien ne se passe, la fenêtre reste bloquer.
    voila mon code :

    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
    printf("$login:");
        scanf("%s" ,login);
     
     
        do{
     
                   printf("$passwd:"); 
     
                   i=0;
                    while ( (pwd[i]=getch()) != '\n' )
                    i++;
                    pwd[i]='\0';
     
                   length=strlen(pwd);
                   if(length<6)
                   {
                     fprintf(stderr,"passwd doit etre supérieur a 5 caractère\n");
                   }
       }
        while(length<6);
    merci de votre aide.

    a+

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par basbasa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    while ( (pwd[i]=getch()) != '\n' )
    Attention, on est plus en standard. Le code raw (brut) qui marque la fin de saisie sous MS-DOS/Windows est '\r'.

    Ne pas utiliser scanf(), surtout quand on ne sait pas l'utiliser (comme 99 % des gens, je te rassure). Ici, tu as fait un magnifique trou de sécurité. Interessant pour un login...

    Je recommande fgets().

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Sous linux pour cacher la saisie regarde du cote de stty
    system("stty -echo");

    il me semble
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci bcp j'ai remplacé '/n' par '/r' et ça marche.
    merci encore pour l'url, je vais remplacer scanf par fgets().

    a+

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    j'ai remplacé fscanf par fgets pour lire dans un fichier, le pb c'est que je cherche une ligne et une fois trouvé je veux faire un test sur la ligne suivante.

    la syntaxe et la suivante
    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
     
     
     
        char pwd[125];
        char login[125];
        char *ptr;
        char ligne[125];
        char wordSerach[125];
        char * line;
     
     
    while (fgets (ligne, sizeof ligne, file) != NULL) {
     
             strcpy(wordSerach,"login:");
             ptr=strcat(wordSerach, login);    
     
             line =  strstr(ligne,ptr);
     
     
             if(line!=NULL){
     
             // je veux vérifier la ligne suivante line +1
     
             char * chaine =  strstr([b]line[/b],"pwd:");
     
                     if(chaine != NULL)
               {
                          printf ("chaine %s\n", chaine);
               }
    le pb c'est que ligne n'est pas un pointeur sur la ligne pour lire ligne+1 mais c'est un tableau.
    lorsque j'ai remplacé le tableau par le pointeur ça n'a pas marché.

    comment faire?

    merci de votre aide.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par basbasa
    j'ai remplacé fscanf par fgets pour lire dans un fichier, le pb c'est que je cherche une ligne et une fois trouvé je veux faire un test sur la ligne suivante.

    comment faire?
    Laisser passer un tour. C'est de la logique séquencielle. Il faut donc une variable d'état. C'est un problème d'algorithme, pas de C...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. cacher la saisie d'un mot de passe
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/07/2012, 12h34
  2. cacher un texte lors de la saisi
    Par moicats dans le forum Access
    Réponses: 5
    Dernier message: 09/05/2006, 16h51
  3. cacher l'aide à la saisie- comme google suggest
    Par hpfx dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/11/2005, 11h36
  4. cacher la saisie du mot de passe
    Par Antoine_1977 dans le forum Modules
    Réponses: 5
    Dernier message: 23/09/2005, 18h13
  5. cacher la saisie tappée au clavier
    Par pierrot512 dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2004, 21h46

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