Je suis conscient qu'il n'est pas possible d'écho le * pendant que vous tapez dans ANSI C standard. Mais est-il un moyen de ne rien afficher lorsque quelqu'un tape son mot de passe dans la console. Ce que je veux dire, c'est comme les invites sudo dans un terminal Unix/Linux. Comme si vous tapez la commande: sudo cp /etc/somefile ~/somedir
. Vous êtes généralement invité à entrer le mot de passe root. Et pendant que vous le tapez, le terminal n'affiche rien. Cet effet est-il possible en C? Si c'est le cas, comment?Entrez le mot de passe dans C
Répondre
La fonction que vous recherchez est: getpass(). Vous remarquerez, cependant, qu'il est marqué comme "LEGACY". Bien que cela ne va nulle part, la fonction ne permet pas de spécifier la taille du tampon d'entrée, ce qui en fait une très bonne interface. Comme Jefromi l'a noté, le manuel de glibc fournit portable example code for implementing getpass from scratch d'une manière qui permet une taille d'entrée arbitraire (et n'est pas LEGACY).
Ils devraient fournir 'getnpass()' de sorte que tous les programmeurs n'ont pas besoin de réinventer la roue ... – Calmarius
* Ce n'est pas ANSI C (Merci Billy) Extrait
Vous pouvez détecter avec _kbhit keypress(), puis obtenir la valeur à l'aide _getch(). Les deux fonctions ne répercutent pas le contenu à l'écran.
#include <conio.h> //For keyboard events
#include <stdio.h> //Include this or iostream
#include <locale>
int main()
{
bool bContinue = true;
char szBuffer[255] = {0};
unsigned int nbufIndex = 0;
while (bContinue)
{
if (_kbhit())
{
szBuffer[nbufIndex] = _getch();
if (szBuffer[nbufIndex] == 0xD)
{
bContinue = false;
}
else
{
++nbufIndex;
printf("*");
}
}
}
printf("\n%s\n", szBuffer);
return 0;
}
Notez que ce n'est pas ANSI C. –
Je ne pense pas que 'conio.h' soit susceptible d'être disponible si vous ' re compiler sous UNIX ou Linux. –
sudo est écrit en C, donc oui :). La fonction getpass()
Safyan mentioned est probablement ce que vous voulez, mais voici où l'outil sudo réelle qu'il fait si vous êtes intéressé:
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
méthode du pauvre homme de le faire est de lire le caractère d'entrée utilisateur par caractère, et après que chaque caractère est reçu, imprimez un caractère de retour arrière suivi de *
. La sortie est techniquement envoyée à la console, mais elle est immédiatement effacée et remplacée par un astérisque (souvent avant même que cette image ne soit dessinée sur l'écran). Notez que ce n'est pas vraiment une méthode sécurisée et qu'il existe plusieurs failles de sécurité, mais pour les applications de basse sécurité à faible technologie, cela fonctionne.
- 1. Entrez le mot de passe plusieurs fois
- 2. Lancez le navigateur à partir de C# et entrez le nom d'utilisateur et le mot de passe
- 3. Mot de passe et confirmer le mot de passe
- 4. Enregistrer le mot de passe crypté et le mot de passe ou simplement stocker le mot de passe crypté?
- 5. Confirmer le mot de passe?
- 6. Enregistrer le mot de passe dans TortoiseHg
- 7. Modifier le mot de passe de l'administrateur local en C#
- 8. .pfx mot de passe problème C#
- 9. Informations sur le mot de passe
- 10. Valider le mot de passe expiré dans le répertoire actif
- 11. changer le mot de passe utilisateur asp.net en récupérant le mot de passe actuel
- 12. Sauvegarder le mot de passe de connexion
- 13. Modifier le mot de passe Erreur code
- 14. Runas Erreur: Impossible d'acquérir mot de passe
- 15. Protéger le mot de passe intégré
- 16. Comment crypter le mot de passe
- 17. openldap et le mot de passe root
- 18. SharePoint mémorisant le mot de passe modifié
- 19. JavaScript pour valider le mot de passe
- 20. Adhésion ASP.NET valider le mot de passe
- 21. Mot de passe Protéger pour le plaisir
- 22. Comment fonctionne le mot de passe wordpress?
- 23. Codeigniter retourner le mot de passe dans le profil?
- 24. Comment réinitialiser le mot de passe SA?
- 25. HTML/CSS: Comment faire "mot de passe" entrée afficher le mot de passe?
- 26. C# - Pousser Entrez dans MessageBox déclenche le contrôle KeyUp événement
- 27. Effacer le mot de passe Eclipse Subversion
- 28. vérifier le mot de passe en PHP?
- 29. Récupérer le mot de passe DNN
- 30. Ektron utilisateur changer le mot de passe?
Qu'est-ce qu'il n'est pas possible d'afficher "*"? printf ("*"); le fera. –
@Peter K .: Je crois qu'il fait référence au fait que toutes les fonctions d'entrée standard font écho à la console. Bien sûr, vous pouvez imprimer *, mais le caractère que l'utilisateur a tapé est déjà là. –
copie possible http://stackoverflow.com/questions/1196418/getting-a-password-in-c-without-using-getpass-3 –