Soy consciente de que no es posible repetir el * mientras escribe en el estándar ANSI C. Pero ¿hay alguna manera de mostrar nada mientras alguien está escribiendo su contraseña en la consola? Lo que quiero decir es como las instrucciones sudo en una terminal Unix/Linux. Me gusta si escribe el comando: sudo cp /etc/somefile ~/somedir
. Por lo general, se le solicita la contraseña de root. Y mientras lo ingresa, el terminal no muestra nada. ¿Este efecto es posible en C? Si es así, ¿cómo?Ingrese la contraseña en C
Respuesta
La función que está buscando es: getpass(). Notará, sin embargo, que está marcado como "LEGADO". Aunque no va a ir a ninguna parte, la función no permite especificar el tamaño del búfer de entrada, lo que hace que no sea una interfaz muy buena. Como ha observado Jefromi, el manual de glibc proporciona portable example code for implementing getpass from scratch de una manera que permite un tamaño de entrada arbitrario (y no es LEGADO).
Deberían proporcionar un 'getnpass()' para que no todos los programadores necesiten reinventar la rueda ... – Calmarius
* Esta no es la norma ANSI C (Gracias Billy) muestra
Puede detectar activación de las teclas _kbhit(), a continuación, obtener el valor con _getch(). Ambas funciones no reflejarán el contenido en la pantalla.
#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;
}
Tenga en cuenta que esto no es ANSI C. –
No creo que 'conio.h' probablemente esté disponible si usted ' volver a compilar en UNIX o Linux. –
sudo está escrito en C, así que sí :). La función getpass()
Safyan mentioned es probablemente lo que quiere, pero aquí es donde la herramienta sudo real lo hace si está interesado:
http://sudo.ws/repos/sudo/file/dc3bf870f91b/src/tgetpass.c#l70
método del hombre pobre de hacer esto es leer caracteres de entrada de usuario por carácter, y después de recibir cada carácter, imprima un carácter de retroceso seguido de *
. La salida se envía técnicamente a la consola, pero se borra inmediatamente y se sobrescribe con un asterisco (a menudo incluso antes de que ese cuadro se dibuje en la pantalla). Tenga en cuenta que esto no es realmente un método seguro y tiene varios agujeros de seguridad, pero para aplicaciones de baja seguridad de baja tecnología, funciona.
- 1. UIAlertView ingrese el ID y la contraseña de Apple IAP
- 2. sacudir ventana cuando el usuario ingrese la contraseña incorrecta del código
- 3. Selenio usando Python: ingrese/proporcione la contraseña http proxy para firefox
- 4. primavera: programáticamente ingrese
- 5. GitHub para Mac aparece "ingrese su contraseña para la clave ssh id_rsa" al inicio cada vez
- 6. Hacer que python ingrese la contraseña al ejecutar una secuencia de comandos csh
- 7. Ingrese a la implementación de la interfaz en Eclipse IDE
- 8. Emacs: Ingrese comandos como en gedit
- 9. ingrese la clave y múltiples botones de envío en .net
- 10. Ingrese la clave en EditText tocando onKey dos veces
- 11. Idear no validar contraseña/contraseña de confirmación
- 12. Cambiar la contraseña del administrador local en C#
- 13. cómo puedo desenmascarar C# contraseña de texto y la máscara de nuevo a la contraseña
- 14. pdf protegido contraseña en Objective-C
- 15. Cómo capturar Tomcat arranque ingrese
- 16. ¿Es mejor restablecer la contraseña o devolver la contraseña perdida?
- 17. Enviar formulario cuando ingrese la tecla presionada con Prototype javascript
- 18. C entrada de contraseña de la línea de comando
- 19. Ingrese los cambios desde un tenedor Github
- 20. Auto-Introducción de la contraseña En Sn.exe
- 21. jquery-ui autocompletar no selecciona ingrese
- 22. ¿Cómo evitar que el usuario ingrese decimales?
- 23. Cómo cifrar la contraseña
- 24. PHP desglosando la contraseña
- 25. gitosis pidiendo la contraseña
- 26. y contraseña en problema de contraseña - php
- 27. wpf cuadro de contraseña en un SecureString en C#
- 28. contraseña de la tela
- 29. Encriptación de la contraseña
- 30. PDF protegido con contraseña usando C#
¿Qué no se puede mostrar "*"? printf ("*"); lo haré. –
@ Peter K .: Creo que se está refiriendo al hecho de que todas las funciones de entrada estándar se hacen eco en la consola. Claro, puede imprimir *, pero el personaje que el usuario escribió ya está allí. –
posible duplicar http://stackoverflow.com/questions/1196418/getting-a-password-inc-c-without-using-getpass-3 –