#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
string getpass ( const char *prompt, bool show_asterisk = true ) {
const char BACKSPACE = 8;
const char RETURN = 13;
string password;
unsigned char ch = 0;
cout << prompt << endl;
DWORD con_mode;
DWORD dwRead;
HANDLE hIn = GetStdHandle ( STD_INPUT_HANDLE );
GetConsoleMode ( hIn, &con_mode );
SetConsoleMode ( hIn, con_mode & ~ ( ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT ) );
while ( ReadConsoleA ( hIn, &ch, 1, &dwRead, NULL ) && ch != RETURN ) {
if ( ch == BACKSPACE ) {
if ( password.length() != 0 ) {
if ( show_asterisk )
cout << "\b \b";
password.resize ( password.length() - 1 );
}
} else {
password += ch;
if ( show_asterisk )
cout << '*';
}
}
cout << endl;
return password;
}
int main() {
const char *correct_password = "null"; // <- "null" es la contrasenha de prueba, si pones otra cosa fallará. ;)
cout << "Teste 1: Asteriscos activados" << endl;
string password = getpass ( "Por favor entre con el password: ", true ); // true muestra los asteriscos
if ( password == correct_password )
cout << "Password correcto" << endl;
else
cout << "Password incorrecto. Intente nuevamente" << endl;
cout << "\nTeste 2: Asteriscos desactivados" << endl;
password = getpass ( "Por favor entre con el password: ", false ); // false no muestra los asteriscos
if ( password == correct_password )
cout << "Password correcto" << endl;
else
cout << "Password incorrecto. Lo siento, fallaste." << endl;
return 0;
}