Mot de passe en C

miudem Messages postés 16 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2010 - 26 févr. 2010 à 13:04
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 26 févr. 2010 à 22:21
Bonjour,

J'ai réaliser une application en C, et je cherche à la sécurisé en mettant une barrière a l'entrée présenté par un mot de passe... Y-t-il un format pour la fonction scanf pour le quel, quand l'utilisateur tape des caractères en clavier, en affiche que des étoiles a la place des caractères saisis ? Ou bien existe-il une bibliothèque qui fait ce travail ? Je cherche aussi des fonctions prédéfinis dans des bibliothèques qui effectue le chiffrement et le déchiffrement d'une chaine de caractères donnée ?

Aidez moi, je serai très reconnaissant à vous... :D

3 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 févr. 2010 à 13:47
Salut,

En général quand on est en console on affiche rien du tout au lieux des étoiles. Ne rien afficher est possible grâce à l'utilisation de tcgetattr() et tcsetattr(). Exemple vite fait :

#include <termios.h>
#include <strings.h>
#include <string.h>
#include 
#include <stdio.h>

#define READ_BUFF_SIZE  42

void                    read_password(char *buff)
{
  struct termios        old;
  struct termios        new;
  int                   nb;

  buff[0] = '\0';
  tcgetattr(STDIN_FILENO, &old);
  bcopy(&old, &new, sizeof(struct termios));
  new.c_lflag &= ~ECHO;
  tcsetattr(STDIN_FILENO, TCSADRAIN, &new);
  fgets(buff, READ_BUFF_SIZE, stdin);
  nb = strlen(buff) - 1;
  if (buff[nb] == '\n')
    buff[nb] = '\0';
  tcsetattr(STDIN_FILENO, TCSADRAIN, &old);
}

int     main(void)
{
  char  buff[READ_BUFF_SIZE];

  read_password(buff);
  printf("Mon pass entré: %s\n", buff);
  return 0;
}
0
miudem Messages postés 16 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 5 mai 2010
26 févr. 2010 à 15:47
Merci "tycho brah"... c'est bon j'ai trouvé la solution... voila je vous la partage :

#include <stdio.h>
#include <conio.h>

#define N 500

int main(void)
{
    char s[N] = "", c = 0;
    int i = 0;

    while ((c = getch()) != '\r' && i < N-1)
    {
        if (c != '\b')
        {
            putchar('*');
            s[i++] = c;
        }
        else
        {
            printf("\b \b"); 
            i--;
        }
    }
    s[i] = '\0';
    printf("\n%s\n", s);
    
    return 0;
}

0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 févr. 2010 à 22:21
Ha si tu utilises windows et toutes ses spécificités... faut prévenir...

Soit dit en passant juste comme ça, si on commence par un backspace suivit d'un retour chariot ton code devrai partir en segfault
0