Ввод пароля в консоли
От: Аноним  
Дата: 26.06.08 14:15
Оценка:
Посоветуйте, как ввести пасворд в консольном приложении, чтоб со звёздочками ввод был
Язык С. Система WinXP/Linux.
Спасибо.
Re: Ввод пароля в консоли
От: Were  
Дата: 26.06.08 14:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Посоветуйте, как ввести пасворд в консольном приложении, чтоб со звёздочками ввод был

А>Язык С. Система WinXP/Linux.
А>Спасибо.

Юзай ввод без эха — getch.

Псевдокод примерно таков.
for( ;; )
{
    switch( c = getch())
    {
    case '\n':
        return str;
    default:
        str += c;
        putc("*", stdout);    
    }
}


Стирание символов можешь сам написать, выводишь в консоль \r и пишешь на 1 символ меньше.
Re[2]: Ввод пароля в консоли
От: Vamp Россия  
Дата: 26.06.08 14:51
Оценка:
W>Юзай ввод без эха — getch.
Проблема в том, что getch — ни разу не стандартная.
Да здравствует мыло душистое и веревка пушистая.
Re: Ввод пароля в консоли
От: Аноним  
Дата: 26.06.08 14:55
Оценка: -1
попробуйте управлять позицией курсора функцией SetConsoleCursorPosition(). тогда можно вообще пароль не выводить или выводить звездочками. алгоритм такой
1. выводим приглашение на запрос
2. пользователь вводит чтото
3. чистим экран, и снова рисуем то же приглашение
4. функцией SetConsoleCursorPosition управляем курсором и рисуем то, что хотим
5. вернуться к пункту 2
Re[3]: Ввод пароля в консоли
От: Were  
Дата: 26.06.08 14:58
Оценка:
Здравствуйте, Vamp, Вы писали:

W>>Юзай ввод без эха — getch.

V>Проблема в том, что getch — ни разу не стандартная.

А это проблема? Автор про стандартность ничего не написал )
Re[4]: Ввод пароля в консоли
От: Vamp Россия  
Дата: 26.06.08 15:00
Оценка:
W>А это проблема? Автор про стандартность ничего не написал )
Проблема-проблема. Автор вот что писал: "Система WinXP/Linux".
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Ввод пароля в консоли
От: Аноним  
Дата: 26.06.08 15:02
Оценка:
Здравствуйте, Were, Вы писали:

W>Здравствуйте, Аноним, Вы писали:

А>>Посоветуйте, как ввести пасворд в консольном приложении, чтоб со звёздочками ввод был

W>Юзай ввод без эха — getch.

Спасибо!
Re[5]: Ввод пароля в консоли
От: Were  
Дата: 26.06.08 15:06
Оценка:
Здравствуйте, Vamp, Вы писали:

W>>А это проблема? Автор про стандартность ничего не написал )

V>Проблема-проблема. Автор вот что писал: "Система WinXP/Linux".

Говорят, libncurses и нет проблемы )
Re[3]: Ввод пароля в консоли
От: Аноним  
Дата: 26.06.08 15:09
Оценка:
Здравствуйте, Vamp, Вы писали:

W>>Юзай ввод без эха — getch.

V>Проблема в том, что getch — ни разу не стандартная.
Точно не стандартная? VS2005 вот что пишет:
warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.

POSIX-функции как раз и линух должен поддержиать. Или я ошибаюсь?
Re[6]: Ввод пароля в консоли
От: Vamp Россия  
Дата: 26.06.08 15:11
Оценка:
W>Говорят, libncurses и нет проблемы )
libcurses да. Но она же не у всех!
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Ввод пароля в консоли
От: Vamp Россия  
Дата: 26.06.08 15:12
Оценка:
А>POSIX-функции как раз и линух должен поддержиать. Или я ошибаюсь?
За линух не скажу. В Солярке она в библиотеке libcurses.
Да здравствует мыло душистое и веревка пушистая.
Re: Ввод пароля в консоли
От: Sni4ok  
Дата: 26.06.08 17:44
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Посоветуйте, как ввести пасворд в консольном приложении, чтоб со звёздочками ввод был

А>Язык С. Система WinXP/Linux.
А>Спасибо.

да этоже баян


#ifndef WIN32
struct termios save;
void echoOff()
{
    struct termios term;
    tcgetattr( 0, &save );
    term = save;
    term.c_lflag &= (~ECHO);
    tcsetattr( 0, TCSANOW, &term );
}

void echoOn()
{
    tcsetattr( 0, TCSANOW, &save );
}
#endif

std::string TypePassword()
{
    std::string ret;

    char ch;
#ifndef WIN32
    echoOff();
#endif
    for(;;){
#ifdef WIN32
        ch = getch();
#else
        ch= getchar();
#endif
        if(ch == '\r' || ch == '\n')
            break;
        ret += ch;
    }
#ifndef WIN32
    echoOn();
#endif

    return ret;

}
Re[2]: Ввод пароля в консоли
От: Кодт Россия  
Дата: 26.06.08 19:32
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>попробуйте управлять позицией курсора функцией SetConsoleCursorPosition(). тогда можно вообще пароль не выводить или выводить звездочками. алгоритм такой


Во-первых, где это есть в линуксе?
Во-вторых, звёздочки не дают подсмотреть пароль, а посимвольный вывод (с посимвольным же затиранием) — какую-то возможность даёт.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: Ввод пароля в консоли
От: Vamp Россия  
Дата: 26.06.08 19:49
Оценка:
К>Во-вторых, звёздочки не дают подсмотреть пароль, а посимвольный вывод (с посимвольным же затиранием) — какую-то возможность даёт.
Я думаю, в консоли это все-же малореально. А вот в Х-приложении — запросто, на медленных линиях. Сам такое видал.
Да здравствует мыло душистое и веревка пушистая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.