Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

scanf aveugle

11 réponses
Avatar
Dominique.Micollet
Est ce que quelqu'un connait une version Unix de scanf "aveugle",
permettant la saisie de mot de passe, soit en remplacant les caractères
par des *, soit en n'affichant rien du tout ?



--
Cordialement

Dominique MICOLLET Email : enlevez le .fr.fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69

10 réponses

1 2
Avatar
Eric Levenez
Le 20/10/05 16:48, dans <4357ae25$0$18864$,
«  »
a écrit :

Est ce que quelqu'un connait une version Unix de scanf "aveugle",
permettant la saisie de mot de passe, soit en remplacant les caractères
par des *, soit en n'affichant rien du tout ?


Aucun rapport avec le C standard, mais il existe des fonctions comme getpass
(Unix V7, et tous les dérivés) ou readpassphrase (OpenBSD, Mac OS X...)

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à

Est ce que quelqu'un connait une version Unix de scanf "aveugle",
permettant la saisie de mot de passe, soit en remplacant les
caractères par des *, soit en n'affichant rien du tout ?


C'est pas trop un problème de C, ça relève des fonctions système de la
console. Ca consiste à supprimer l'echo (retour du clavier vers l'écran). Il
doit y avoir une manière propriétaire de le faire pour un matériel donné,
mais je ne suis pas sûr que ça soit standardisé.

En demandant "unix console keyboard echo" à Google, il donne ça par exemple:
http://wiki.tcl.tk/14693
et ça semble compatible avec Windows aussi.

Hope It Helps,

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/

Avatar
Dominique.Micollet
Merci pour vos réponses bien que je ne sois pas dans le bon groupe
(j'ai tendance à penser qu'il y a de C que sous Unix :-) )

--
Cordialement

Dominique MICOLLET Email : enlevez le .fr.fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Avatar
Targeur fou
wrote:

Bonjour,

Merci pour vos réponses bien que je ne sois pas dans le bon groupe
(j'ai tendance à penser qu'il y a de C que sous Unix :-) )


Bon hé bien si c'est sous windows, tu peux regarder du côté des
fonctions non-standard, des borlanderies ou microsofteries répondant
aux noms de getch() (saisie sans écho). Pour chaque caractère saisi
sans écho, tu réalises toi même l'écho avec le caractère exotique
que tu veux, c'est l'unique partie dépendante de l'implémentation.
Ensuite, disposant de la vraie chaine saisie dans un tampon, tu as tous
les outils du C standard pour analyser la chaine comme tu le souhaites.

exple MS sous Windows :

/* en-têtes C Std */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* en-tête MS, E/S console */
#include <conio.h>

/* !! PAS PORTAB' !! */
void GetSecretLine(char * buff, int size)
{
int ch, cnt = 1;

/* Récup du premier car sans écho*/
ch = getch();
while (ch != 'n' && ch != 'r' && cnt <= size)
{
/* Prévention de saisie touches de fonction et flèches */
/* On passe */
if (ch == 0 || ch == 0xE0) {
getch();
ch = getch();
continue;
}
/* On affiche * à la place (écho sur stdout) */
putc('*', stdout);
buff[cnt-1] = ch;
++cnt;
/* Récup du caractère suivant sans écho ...*/
ch = getch();
}
/* On s'assure que l'on a une chaine litérale */
buff[cnt-1] = '';
putc('n', stdout);
}


int main(void)
{
char password[16] = { '' };

int incorrect = 1, numTentative = 0;

while (incorrect && numTentative < 3)
{
printf("Mot de passe (16 car. max) : ");
fflush(stdout);
GetSecretLine(password, 16);
++numTentative;
if (strcmp(password, "fclcmaniac") == 0)
{
puts("OK"); incorrect = 0;
}
else {
puts("Mot de passe incorrect");
}
}

return 0;
}

A+
Regis

Avatar
Targeur fou
wrote:
Merci pour vos réponses bien que je ne sois pas dans le bon groupe


Oui et non. La réponse C, c'est de conseiller de minimaliser ce qui
est dépendant de l'implémentation pour ton cas, à savoir, faire la
saisie de caractère sans écho.

(j'ai tendance à penser qu'il y a de C que sous Unix :-) )


Ben non (voir le post boutade précédent, même si c'est un exple nul
à chier ;-) ). Les fonctions C présentées ici
http://www.erlenstar.demon.co.uk/unix/faq_4.html ne sont pas plus
présentes dans la bibliothèque C standard que getch() par exemple.
Par contre, il est vrai d'une part qu'Unix a été écrit en C et que
les fonctions C Unix sont plus "standard" que d'autres, car elles ont
été reprises pour beaucoup dans l'API C de POSIX (ce qui représente
un grand avantage en terme de portabilité), et que des systèmes Unix,
il y en beaucoup comme plate-formes statégiques (serveurs,
calculateurs, etc..) et plate-formes de développement.

Mais ce n'est pas bien de penser qu'il n'y du C que sous Unix.

A+
Regis

Avatar
Emmanuel Delahaye
Par contre, il est vrai d'une part qu'Unix a été écrit en C et que
les fonctions C Unix sont plus "standard" que d'autres, car elles ont


Tu veux sans doute dire 'portables'...

--
C is a sharp tool

Avatar
Eric Levenez
Le 21/10/05 16:03, dans <4358f550$0$18823$, « Emmanuel
Delahaye » a écrit :

Par contre, il est vrai d'une part qu'Unix a été écrit en C et que
les fonctions C Unix sont plus "standard" que d'autres, car elles ont


Tu veux sans doute dire 'portables'...


Non, il veut dire standard au sens ISO 9945-1 et non pas standard au sens
ISO 9899 :-)

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
Antoine Leca
wrote:
(j'ai tendance à penser qu'il y a de C que sous Unix :-) )


Bien sûr. Comme l'écrivait Brian Kernighan en 1978

Production compilers also exist for several other machines,
including the IBM System/370, the Honeywell 6000, and the
Interdata 8/32.

Sous UNIX(md), probablement.


Antoine

Avatar
Emmanuel Delahaye
Le 21/10/05 16:03, dans <4358f550$0$18823$, « Emmanuel



Par contre, il est vrai d'une part qu'Unix a été écrit en C et que
les fonctions C Unix sont plus "standard" que d'autres, car elles ont


Tu veux sans doute dire 'portables'...



Non, il veut dire standard au sens ISO 9945-1 et non pas standard au sens
ISO 9899 :-)


Hors-sujet donc...

--
C is a sharp tool



Avatar
Harpo
Antoine Leca wrote:

wrote:
(j'ai tendance à penser qu'il y a de C que sous Unix :-) )


Bien sûr. Comme l'écrivait Brian Kernighan en 1978

Production compilers also exist for several other machines,
including the IBM System/370, the Honeywell 6000, and the
Interdata 8/32.

Sous UNIX(md), probablement.


Je ne sais pas s'il existait de 'production compilers' C en 1978 sur
IBM/370, ça devait être 'secret défense', je ne pense pas qu'ils aient
montré de véléités avant le début des 80.
Quand à Honeywell, si c'est ce truc d'informatique française pour
lesquels j'ai travaillé un moment, il développaient un langage du style
C, j'ai été employé sur le debugger, printer le stack, desassembler les
instructions et ce genre de conneries plus chiantes que la mort, le
chef du projet je ne l'ai jamais vu que derrière son bocal en verre
dans lequel il devait peaufiner une notation BNF avec son stylo et du
papier, je me suis cassé en oubliant de les en avertir.
Il faudrait que je les appelle pour savoir si leur langage va bientôt
sortir.


1 2