2010-10-29 7 views
1

J'écris un programme Linux CLI. Je dois obtenir un mot de passe de l'utilisateur et, évidemment, je ne veux pas que le mot de passe soit renvoyé à la console.Comment obtenir un mot de passe avec un programme CLI?

Il existe plusieurs solutions disponibles, mais ils sont tous pour plaine C. C command-line password input
How to mask password in c?
Getting a password in C without using getpass (3)?

Comment les être adaptés pour C++, en utilisant std :: string au lieu de char []?

Quelle serait la solution C++ la plus élégante?

+1

Si vous avez un 'char x [] ', vous pouvez créer' std :: string s (x); '. –

+2

Si vous vous souciez de la sécurité, n'utilisez pas 'std :: string', utilisez un ancien tampon' char' dans une région 'mlock''d pour éviter que le mot de passe ne soit copié dans la mémoire et se retrouve dans le swap fichier. Effacez-le avec 'memset' dès que vous en avez fini avec lui. –

+0

@Tony: merci. Je suis toujours aux prises avec les bases, donc je ne pense pas encore à des choses simples comme celle-ci. – augustin

Répondre

2

Utilisez l'une des solutions C simples:

std::string pass (100); // size the string at your max password size (minus one) 

func_to_get_pass(&pass[0], pass.size()); 
// function takes a char* and the max size to write (including a null char) 

pass.resize(pass.find('\0')); 

cout << "Your password is " << pass << ".\n"; // oops! don't show it ;) 
+0

+1. Merci pour le code. Je ne maîtrise pas ce genre de choses simples, pour l'instant. C'est très utile. – augustin

2

Linux lui-même est écrit (principalement) en C, donc tout ce que vous pourriez trouver en C++ ne serait qu'une abstraction autour d'une seule routine C. Mieux vaut appeler la routine vous-même, en convertissant l'entrée et le résultat.

+0

+1. Merci .. – augustin

Questions connexes