C ++ маскировка паролей - PullRequest
       34

C ++ маскировка паролей

3 голосов
/ 26 марта 2010

Я пишу код для получения ввода пароля. Ниже приведен мой код ... программа работает хорошо, но проблема в том, что кроме клавиш для цифр и букв также читаются другие ключи, например, удаление, вставка и т. Д. Могу ли я узнать, как можно избежать этого? TQ ...

string pw="";
char c=' ';

while(c != 13) //Loop until 'Enter' is pressed
{
    c = _getch();
    if(c==13)
        break;

    if(c==8)
    {
        if(pw.size()!=0)   //delete only if there is input 
        {
            cout<<"\b \b";
            pw.erase(pw.size()-1);
        }
    }

    if((c>47&&c<58)||(c>64&&c<91)||(c>96&&c<123))  //ASCii code for integer and alphabet
    {
        pw += c;
        cout << "*";
    }
}

Ответы [ 2 ]

7 голосов
/ 26 марта 2010

Фильтр с использованием isalnum() для буквенно-цифрового или isalpha() только для алфавитов.

Кроме того, вы проверяете c == 13 дважды, будет достаточно следующего.

while(1){
  //
  if(c == 13)
    break;
  //
}

if( isalnum(c) ){
  // 'c' is acceptable
}

Некоторое утверждение не выполняется во время выполнения, которое выдает эту ошибку.

1 голос
/ 26 марта 2010

Если у вас есть доступ к нему, вам гораздо лучше использовать функцию GNU getpass.

...