Hide password input on terminal

后端 未结 15 1365
清酒与你
清酒与你 2020-11-22 09:55

I want to mask my password while writing it with *. I use Linux GCC for this code. I know one solution is to use getch() function like this

15条回答
  •  有刺的猬
    2020-11-22 10:39

    man getpass

    This function is obsolete. Do not use it. If you want to read input without terminal echoing enabled, see the description of the ECHO flag in termios(3)

    # include 
    # include    /* needed for STDIN_FILENO which is an int file descriptor */
    
    struct termios tp, save;
    
    tcgetattr( STDIN_FILENO, &tp);              /* get existing terminal properties */
    save = tp;                                  /* save existing terminal properties */
    
    tp.c_lflag &= ~ECHO;                        /* only cause terminal echo off */
    
    tcsetattr( STDIN_FILENO, TCSAFLUSH, &tp );  /* set terminal settings */
    
    /*
       now input by user in terminal will not be displayed
       and cursor will not move
    */
    
    tcsetattr( STDIN_FILENO, TCSANOW, &save);   /* restore original terminal settings */
    

    If you notice, most current linux distro's do not mask a password with asterisks. Doing so divulges the length of the password which is no way beneficial. It is easier and better to simply make the cursor not move when a password is typed in. If for whatever reason you require a * to be printed for every character that's typed then you would have to grab every keypress before Enter is hit and that's always been problematic.

提交回复
热议问题