0

Dictionary.TryGetValue()ユーザー名とパスワードのハッシュの辞書を検索するために使用しようとしています。一致する場合はユーザーを認証し、そうでない場合は何か他のことを行います。

私が抱えている問題は、ハッシュ値が辞書の内容と一致しない場合はいつでも、おそらくユーザー名キーと一致したため、とにかく true を返すことです? キーのみが一致し、その値が一致しない場合に true を返す動作は予想されますか?

メソッドとユーザー出力を以下に示します。トラブルシューティングの目的でハッシュを出力しています。

ハッシュが一致し、その後一致しないユーザー出力の例を次に示します。

ハッシュが最初に一致しない場合、動作は変わりません

パスワード認証システム

1 つのオプションを選択してください:

  1. アカウントを開設する
  2. ユーザーを認証する
  3. システムを終了する

選択を入力してください: 1 ユーザー名を入力してください: ユーザー名

パスワードを入力してください: ユーザー名、5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8]

パスワード認証システム

1 つのオプションを選択してください:

  1. アカウントを開設する
  2. ユーザーを認証する
  3. システムを終了する

Enter selection: 2 認証したいユーザー名を入力 Username: ユーザー名

パスワードを入力し てください: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

パスワード認証システム

1 つのオプションを選択してください:

  1. アカウントを開設する
  2. ユーザーを認証する
  3. システムを終了する

Enter selection: 2 認証したいユーザー名を入力 Username: ユーザー名

パスワードを入力してください: 152f66d0fe3a409590ec40fea1ee037cefb4549a1f511defd16824117a768b1d 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

ユーザー名として正常に認証されました

以下、認証方法

        static void authUser(string userName)
        {
            if (!passDB.ContainsKey(userName))
                Console.WriteLine($"Username \"{userName}\" does not exist.");
            else if (passDB.ContainsKey(userName))
            {
                string secret;
                string testHash;
                int tryCount = 4;

                do
                {
                    secret = HidePassInput();

                    SHA256 sha256Hash = SHA256.Create();
                    testHash = GetHash(sha256Hash, secret);
                    Console.WriteLine(testHash);
                    if (passDB.TryGetValue(userName, out testHash))
                    {
                        Console.WriteLine(testHash);
                        Console.WriteLine($"Successfully authenticated as {userName}\n");
                        tryCount = 0;
                    }
                    else
                    {
                        tryCount--;
                        Console.WriteLine($"Failed to autheticate as {userName}. {tryCount} more tries left.\n");
                    }
                    
                } while (tryCount > 0);
            }
        }
4

1 に答える 1