Ocultar entrada de usuario en la solicitud de contraseña

Posible duplicado:
Lee la contraseña de std :: cin

No trabajo normalmente con la consola, por lo que mi pregunta es muy fácil de responder o imposible de hacer.

¿Es posible “desacoplar” cin y cout , para que lo que escribo en la consola no aparezca directamente en él otra vez?

Necesito esto para permitir que el usuario escriba una contraseña y ni yo ni el usuario normalmente queremos que su contraseña aparezca en plaintext en la pantalla.

Intenté usar std::cin.tie en un stringstream , pero todo lo que stringstream todavía está reflejado en la consola.

De cómo ocultar el texto :

Windows

 #include  #include  #include  using namespace std; int main() { HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD mode = 0; GetConsoleMode(hStdin, &mode); SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT)); string s; getline(cin, s); cout << s << endl; return 0; }//main 

limpiar:

 SetConsoleMode(hStdin, mode); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 

Linux

 #include  #include  #include  #include  using namespace std; int main() { termios oldt; tcgetattr(STDIN_FILENO, &oldt); termios newt = oldt; newt.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &newt); string s; getline(cin, s); cout << s << endl; return 0; }//main 

Realmente preguntas sobre dos cuestiones no relacionadas.
Llamar a cin.tie( NULL ) desacopla por completo std::cin y std::cout . Pero no afecta nada a un nivel inferior. Y en el nivel más bajo, al menos en Windows y Unix, std::cin y std::cout están ambos conectados al mismo dispositivo en el nivel del sistema, y ​​es ese dispositivo ( /dev/tty en Unix) el que hace haciendo eco; incluso puede redirigir el estándar a un archivo, y la consola seguirá recibiendo la entrada.

Cómo se desactiva este eco depende del sistema; la solución más fácil es, probablemente, utilizar algún tipo de biblioteca de terceros, como curses o ncurses, que proporcione una interfaz de nivel superior y oculte todas las dependencias del sistema.

Use getch() para obtener la entrada en lugar de usar cin , de modo que la entrada no se mostrará (citando wiki):

int getch (void) Lee un personaje directamente desde la consola sin búfer y sin eco.

Esto es realmente C, no C ++, pero podría ser adecuado para usted.

Además, hay otro enlace aquí.