una programacion lenguaje intentos guardar generador contraseñas contraseña con completo como comandos caracteres c passwords

programacion - manual completo de c++ pdf



Obtener una contraseña en C sin usar getpass(3)? (5)

Aunque esta es una pregunta muy antigua que ya se ha respondido, esto es lo que he estado usando (que es muy similar a la respuesta aceptada):

#include <termios.h> #include <cstdio> // // The following is a slightly modifed version taken from: // http://www.gnu.org/software/libc/manual/html_node/getpass.html // ssize_t my_getpass (char *prompt, char **lineptr, size_t *n, FILE *stream) { struct termios _old, _new; int nread; /* Turn echoing off and fail if we can’t. */ if (tcgetattr (fileno (stream), &_old) != 0) return -1; _new = _old; _new.c_lflag &= ~ECHO; if (tcsetattr (fileno (stream), TCSAFLUSH, &_new) != 0) return -1; /* Display the prompt */ if (prompt) printf("%s", prompt); /* Read the password. */ nread = getline (lineptr, n, stream); /* Remove the carriage return */ if (nread >= 1 && (*lineptr)[nread - 1] == ''/n'') { (*lineptr)[nread-1] = 0; nread--; } printf("/n"); /* Restore terminal. */ (void) tcsetattr (fileno (stream), TCSAFLUSH, &_old); return nread; } // // Test harness - demonstrate calling my_getpass(). // int main(int argc, char *argv[]) { size_t maxlen = 255; char pwd[maxlen]; char *pPwd = pwd; // <-- haven''t figured out how to avoid this. int count = my_getpass((char*)"Enter Password: ", &pPwd, &maxlen, stdin); printf("Size of password: %d/nPassword in plaintext: %s/n", count, pwd); return 0; }

Podría usar getpass() para obtener una contraseña. Sin embargo, la página man dice:

Esta función es obsoleta. No lo uses.

¿Cuál es la forma actual de obtener una contraseña del terminal del usuario sin hacer eco, de una manera compatible con POSIX? [Originalmente dije "portably", pero mi intención era evitar el uso de una función obsoleta.]


En Windows, probablemente pueda usar la API SetConsoleMode , que se describe here .


Puede usar la biblioteca ncurses para leer desde la entrada estándar sin repetir los resultados en la pantalla. (Llame a noecho() antes de obtener cualquier entrada). La biblioteca ha existido durante años y funciona en una amplia variedad de plataformas (la versión de Windows se puede encontrar here )


Según la documentación de la Universidad de Milwaukee, está obsoleto porque:

La función getpass() no es segura para los hilos porque manipula el estado de la señal global.

La función getpass() está programada para retirarse de una versión futura de la especificación X / Open CAE.


esto debería funcionar en linux / macosx, una versión de Windows debería usar Get / Set ConsoleMode

#include <stdio.h> #include <stdlib.h> #include <termios.h> int main(int argc, char **argv) { struct termios oflags, nflags; char password[64]; /* disabling echo */ tcgetattr(fileno(stdin), &oflags); nflags = oflags; nflags.c_lflag &= ~ECHO; nflags.c_lflag |= ECHONL; if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) { perror("tcsetattr"); return EXIT_FAILURE; } printf("password: "); fgets(password, sizeof(password), stdin); password[strlen(password) - 1] = 0; printf("you typed ''%s''/n", password); /* restore terminal */ if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) { perror("tcsetattr"); return EXIT_FAILURE; } return 0; }