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

Linux Discussion :

lire un mot de passe


Sujet :

Linux

  1. #1
    Membre régulier Avatar de yashiro
    Inscrit en
    Mars 2004
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 214
    Points : 82
    Points
    82
    Par défaut lire un mot de passe
    J'aimerais savoir comment je peu, en c sous linux lire un mot de passe et afficher des ****
    J'ai d'abord pensé à la fonction select mais le code que j'ai écris affiche le caractere saisi à l'écran

    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
    int main()
     {
      fd_set readset
      struct timeval temps;
      char car;
      int retour, fd = 0;
     
      temps.tv_sec = 1;
      temps.tv_usec = 0;
     
      FD_ZERO(&readset);
      FD_SET(fd, &readset);
      retour = select(fd+1, &readset, NULL, NULL, &temps);
     
      if(!retour) printf(".......");
      else if(FD_ISSET(fd, &readset))
       { read(fd, &car, sizeof(char));
          printf("%c", car);
       }
     
      return 0;
     }
    Le caractère que je tape s'affiche à l'écran et c'est pas bon. Comment puis-je faire pour que ça ne s'affiche plus?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Une solution serait d'utiliser la librairie ncurses, plus particulierement cbreak(), pour pouvoir lire les characteres un a la fois et noecho() pour empecher qu'ils s'affichent.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par yashiro
    Le caractère que je tape s'affiche à l'écran et c'est pas bon. Comment puis-je faire pour que ça ne s'affiche plus?
    Indice : que fait dans ton code ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 13
    Points
    13
    Par défaut
    et en faisant une boucle du style:
    char buf, str[64];
    int i=0;
    buf = getchar(); //recupère le premier caractère
    while(buf != '\n') //tan que ce n'est pas un retour a la ligne, on fait ce qu'il y a dans la boucle
    {
    printf("*"); //affiche une étoile à la place du carractère
    str[i] = buf; //ajoute le caractère à la fin de la chaine
    buf = getchar(); //recupère le caractère suivant
    i++; //incremente l'iterateur de la chaine
    }
    je sais plus trop si getchar() affiche le caratère saisis, auquel cas, il faut changer le printf("*");
    par : printf("\b*")
    le caractère saisis risque de s'afficher quelques microsecondes.
    il faut tester la variable "i" pour ne pas depasser la taille maxi de la chaine

    edit : c'est tout dans stdio.h et stdlib.h

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Malheureusement, une solution n'utilisant que la librarie standard ne marche pas sur la majorite des terminaux car ils sont "line buffered", c'est a dire que les characteres tapes au clavier sont envoyes au programme une ligne a la fois.

    Pour eviter d'afficher les characteres tapes et pouvoir les lire sans attendre la fin de la ligne il faut utiliser les fonctions de ncurses ou termios:

    un exemple avec ncurses

    un exemple avec termios

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067

Discussions similaires

  1. Lire un mot de passe d'un formulaire
    Par marrad dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/12/2014, 00h01
  2. [Débutant] Lire dans un fichier protéger par un mots de passe
    Par xavvdb003 dans le forum C#
    Réponses: 1
    Dernier message: 29/10/2012, 09h50
  3. Lire fichers Excel avec Mot de passe
    Par tiboo dans le forum C#
    Réponses: 7
    Dernier message: 16/07/2010, 14h55
  4. Lire mot de passe de la base de register
    Par nemya dans le forum C#
    Réponses: 1
    Dernier message: 25/12/2007, 13h30
  5. Réponses: 4
    Dernier message: 21/06/2006, 10h16

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