2017-02-10 9 views
-7

C++でのユーザー登録を管理するシンプルなシステムを完成させようとしています(パスワードハッシングを使用)。私はインストラクターに必要なユーザー名とパスワードを保存する方法を考え出し、失敗した3回の試行後に誰かをロックする方法を見つけようとしています。私のコードでは、私はこれを行うために使用しようとしていたコードをコメントしましたが、私は動作するとは思わない。私は本当に3つの試行後に誰かをロックする機能を作成する方法に関する提案を感謝します。ユーザー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

あなたはパスワードをチェックするコードをコメントアウトしたが、インストラクターはログイン失敗回数が3回に達した後にユーザーをロックするように(Basileと同意し、誰もあなたの宿題を望んでいない)障害をチェックするコードを提供していないときにも、どのように助けを始めようとしていますか? –

答えて

-1

わかりました。私はこの寛大な権利をかなり寛大に感じています。チャットでこれを行うつもりだったのですが、あなたの担当者のポイントが1であるため、私はあなたとはできません。あなたの宿題を手伝ってください。私が個人的には経験のレベルにかかわらず、私の学生だった人の方が良いと思うので、それは確かです。

スパムヘッジのモンスターの名前は、まず、グローバルスコープの次のコード行ですか?

char usrname; 

何でも良いことはありません。良くないと言えば私は「niffler」のものとreturnValue()合成した後、パスワード「ハッシュ」機能は、(以下であることを前提とするのでしょうか?ハッシュ関数はありません

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)。実際には、文字の無数の組み合わせが全く同じハッシュになります。その時点で、鼻を持ち、パスワードを直接保管することもできます。実際のパスワードにアクセスするよりも速く(ハッシュの衝突を介して)、より速いハッシングメカニズムを使用してください.Wikipediaの記事Cryptographically secure hashesHash saltingを指摘します。

あなたがやっていることの流れは信じられないほど間違っています。あなたのインストラクターは、10人が正しくログインできるように頼んだのですか?同じ時間に10人もログインするのはなぜですか?あなたのインストラクターは、には、同時にログインする必要はありませんが、ログインするのに10人でを許可すると教師に期待しています。どのプログラムが10人のユーザーにログインするように求めるのはなぜですか? FacebookやTwitterは10個のログインプロンプトを表示しますか?より現実世界のプログラムのようにそれの

だと思う...

  • は、ユーザー名、パスワードハッシュ、およびアクセス権を含む最大10個のログインエントリのいくつかのフォームのデータベースを必要としています。
  • プログラムを実行すると、ユーザーはデータベースにログインすることができます。
  • ログインに失敗した場合は、ロックアウトする必要があります。 プログラムを中止し、再度実行し直すようにしてください(sleep()はそうするため)を数えません。
  • ログインに成功した場合は、アクセス資格情報を確認してください。なぜユーザーに管理者であるかを尋ねるのはなぜですか?

これらの全てはifである。それを少し抽象化してください。あなたがコンピュータのように考えることができない場合は、ソフトウェアを書くことができないため、プログラムのようなプログラム。

管理者の場合は、ユーザーレコードを追加、変更、または削除することができます。最初の(ハードコーディングされた)ユーザーは通常は管理者であり、ほとんどの場合プログラマーによって追加されます。