2017-02-10 3 views
-7

Я очень новичок в кодировании и пытаюсь закончить простую систему, которая управляет регистрацией пользователя на C++ (используя хеширование пароля). Я выяснил, как хранить имена пользователей и пароли, как это требовалось нашему инструктору, и пытаюсь выяснить, как заблокировать кого-то после трех неудачных попыток. В моем коде я прокомментировал код, который я пытался использовать для этого, но я не думаю, что это сработает. Я бы очень признателен за любые предложения о том, как создать функцию, которая блокирует кого-то после трех попыток.Программа регистрации пользователей для 10 пользователей

#include <iostream> 
#include <string> 


using namespace std; 

int returnVal(char x) 
{ 
    return x - 96; 

} 

char usrname; 



int main() { 

    string name[10]; 
    int password[10]; 
    bool status[10]; 



    int index = 0; 
    for (int i = 0; i < 10; i++) 



    { 
     //int count = 0; 
     //for (;;) 
     //{ 
      //ask_password(); 
      //if (password == expected_password) 
       //break; 
      //count++; 
      //if (count == 3) 
      //{ 
      // Sleep(300000); // 5 minutes = 300000 ms. 
      // count = 0; 
      //} 
     } 
     string s; 

     cout << "Please Enter Username " << endl << "Should you wish to stop entering user information enter 0: "; 
     cin >> name[index]; 

     if (name[index] == 0) { 
      break; 
     } 

     cout << "Please Enter Password "; 
     cin >> s; 

     cout << "Are you a regular user or an admin? " << endl << "Enter 0 for a regular user and 1 for admin: "; 
     cin >> status[index]; 




     int niffler = 0; 

     for (unsigned int i = 0; i < s.length(); i++) 
     { 

      niffler = niffler + returnVal(s[i]); 
     } 

     password[index] = niffler; 

     cout << niffler; 

     index++; 
    } 

    cout << "10 users have been created"; 


    // check username array for input 
    // save where in the array we find the correct username 
    // check password 

    return 0; 

} 
+5

Мы не будем делать домашнее задание здесь. Ваш вопрос * fix-my-code * или * write-my-code * не соответствует теме. Пожалуйста, подумайте больше. Скомпилируйте все предупреждения и информацию об отладке ('g ++ -Wall -g'). ** использовать отладчик ** ('gdb') –

+0

Измените свой вопрос и исправьте форматирование и отступ кода. – Lundin

+0

Вы говорите, что прокомментировали код, чтобы проверить пароль, но ваш инструктор спросил вас (_clearing throat _... Соглашаясь с Basile, никто не хочет делать домашнее задание для вас), чтобы заблокировать пользователя после 3 неудачных попыток входа в систему. Как кто-то должен даже помогать, когда вы даже не предоставляете код, который проверяет наличие ошибки? –

ответ

-1

Хорошо, я чувствую себя довольно щедро на этой второй. Просто собирался сделать это в чате, но я не могу с тобой, потому что твои ответы - 1. Независимо от того, я буду помочь тебе с домашней работой (не делай этого для тебя). Если что-либо, что следует за этим, звучит красно, это, конечно, потому, что я лично ожидал бы лучшего от любого, кто был моим учеником, независимо от уровня опыта.

В первую очередь, что-в-названии-спагетти-монстра является следующей строкой кода в глобальной области применения?

char usrname; 

Что бы это ни было, это не может быть хорошо. Говоря о нехорошо. Могу ли я считать, что функция пароля «хэш» следующий (после того, как я смешан returnValue() с «niffler» вещи?

int hashPassword(const std::string& password) { 
    int hash = 0; 
    for (size_t i = 0; i != password.size(); ++i) 
     hash += password[i] - 96; 
    return hash; 
} 

Это не хэш-функция. Если вы делаете математику это означает, что пароли " Pz "и" "точно такие же (0) .На самом деле, бесчисленные комбинации символов приводят к точному же хэшу. В этот момент вы можете также держать нос и хранить пароль напрямую, потому что кто-то может перетаскивать пароли (через хэш-столкновение) быстрее, чем они могут получить доступ к фактическим паролям. Не делайте этого, но используйте лучший механизм хэширования. Я хотел бы указать вам на статьи Википедии Cryptographically secure hashes и Hash salting.

Поток того, что вы делаете, невероятно неправильный. Ваш инструктор попросил вас разрешить десять человек войти в систему правильно? Почему одновременно регистрировались десять человек? Что-то подсказывает, что ваш инструктор ожидает, что вы до позвоните для 10 человек, чтобы войти в систему, не обязательно все одновременно. Почему любая программа просит 10 человек войти в систему? Предоставляет ли Facebook или Twitter 10 подсказок для входа в систему?

думать о нем, как в реальном мире программы ...

  • Вам нужна база данных той или иной форме не более 10 записей входа в систему, включая имя пользователя, хэш пароля и прав доступа.
  • Запуск программы позволяет пользователю войти в систему, если они находятся в базе данных.
  • Если они не работают при входе в систему, они должны быть заблокированы. Прервать программу и просто позволить им снова запустить ее снова, чтобы повторить попытку (как это делал sleep()) не учитывается.
  • Если они вошли в систему успешно, проверьте их учетные данные доступа. Почему вы спросите пользователя, являются ли они администратором?

Все они являются if условиями. Выясните это немного. Программа, подобная программе, потому что вы не можете писать программное обеспечение, если не можете думать, как компьютер.

Для дополнительного кредита, если они являются администратором, позволяют им добавлять, изменять или удалять записи пользователя. Первый (жесткий) пользователь обычно является администратором и почти всегда добавляется программистом.

Смежные вопросы