Как замаскировать пароль в c? - PullRequest
1 голос
/ 18 ноября 2009

В C я хочу отобразить каждый отдельный символ, который пользователь вводит как * (Ex, пожалуйста, введите ваш пароль: *****)

Я ищу, но не могу найти решение для этого. Я работаю над Ubuntu. Кто-нибудь знает хороший способ?

Ответы [ 4 ]

3 голосов
/ 18 ноября 2009

Взгляните на библиотеку ncurses . Это очень либеральная библиотека с огромным количеством функций на самых разных системах. Я не очень часто его использовал, поэтому не уверен, какие именно функции вы хотите вызвать, но если взглянуть на документацию 1004 *, я уверен, что вы найдете то, что вам нужно хочу.

1 голос
/ 18 ноября 2009

Смотри мой код. он работает в моей системе FC9 x86_64:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>

int main(int argc, char **argv)
{
        char passwd[16];
        char *in = passwd;
        struct termios  tty_orig;
        char c;
        tcgetattr( STDIN_FILENO, &tty_orig );
        struct termios  tty_work = tty_orig;

        puts("Please input password:");
        tty_work.c_lflag &= ~( ECHO | ICANON );  // | ISIG );
        tty_work.c_cc[ VMIN ]  = 1;
        tty_work.c_cc[ VTIME ] = 0;
        tcsetattr( STDIN_FILENO, TCSAFLUSH, &tty_work );

        while (1) {
                if (read(STDIN_FILENO, &c, sizeof c) > 0) {
                        if ('\n' == c) {
                                break;
                        }
                        *in++ = c;
                        write(STDOUT_FILENO, "*", 1);
                }
        }

        tcsetattr( STDIN_FILENO, TCSAFLUSH, &tty_orig );

        *in = '\0';
        fputc('\n', stdout);

        // if you want to see the result: 
        // printf("Got password: %s\n", passwd);

        return 0;
}
0 голосов
/ 26 февраля 2014

используйте такую ​​программу, как эта задайте мне еще вопросы

эта программа используется для помещения * вместо символа и удаляет ввод после использования возврата ^^

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    char a[100],c;
    int i;
    fflush(stdin);
    for ( i = 0 ; i<100 ; i++ )
    {

        fflush(stdin);
        c = getch();
        a[i] = c;
        if ( a[i] == '\b')
        {
            printf("\b \b");
            i-= 2;
            continue;
        }
        if ( a[i] == ' ' || a[i] == '\r' )
            printf(" ");
        else
            printf("*");
        if ( a[i]=='\r')
            break;
    }
    a[i]='\0';

    printf("\n%s" , a);
}
0 голосов
/ 18 ноября 2009

сделать это вручную; Считайте ввод по одному символу за раз, например, с помощью getch () в conio, и выведите * для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...