0

同様の回答を見てきましたが、以前に回答した質問から回答が見つからなかったため、これが探しているものです。

これが私のシナリオです。ユーザー名、暗号化されたパスワード、および 4 桁のピンまたはキーを保存するテーブル[res_user]があります。username, password, key_pin

マネージャーがログインしてアプリ自体からデータベースを変更できるようにするアプリを C# で作成しています。

管理者は最初に、提供されたユーザー名、パスワード、および key_pin を使用してログインするように求められます。PIN は、データベースとの間でパスワードを暗号化および復号化するものです。

これで、ユーザー名[manager]と暗号化されたパスワードが既にデータベースに保存されていますkey_pin.

ログインしているマネージャーが正しいことを確認するにはどうすればよいですか。つまり、C# アプリからデータベース内のユーザー名と暗号化されたパスワードを比較するにはどうすればよいでしょうか。

これらは、アプリ自体に実装する予定の手順です (C# で SQL 構文を使用)。

  1. パスワードを暗号化し、

  2. ログインユーザー名を使用してデータベースに保存された暗号化を取得し、

  3. アクセス制御のために、はいまたはいいえをアプリに返す暗号化を比較します。

ログインを 5 回まで試行できます。

これは私が行った最初と2番目の部分です:

try
{
   using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["STRING"].ConnectionString))
   {
     using (SqlCommand cmd = new SqlCommand("dbo.Res_User", con))
     {
       cmd.CommandText = "INSERT INTO Res_User(username, password, key_pin) SELECT '" + username + "' , dbo.fnEncDecRc4('" + pin + "','" + password + "'), '" + pin + "'";
       con.Open();
       cmd.ExecuteNonQuery();

       MessageBox.Show("Added", "Information", MessageBoxButtons.OK);

       cmd.CommandText = "SELECT password FROM Res_User WHERE username = @username";
       cmd.Parameters.AddWithValue("@username", username);
       cmd.ExecuteNonQuery();

       using (SqlDataReader reader = cmd.ExecuteReader())
       {
           if (reader.HasRows)
           {
               while (reader.Read())
               {
                    MessageBox.Show(reader["password"].ToString(), "Information", MessageBoxButtons.OK);
               }
           }
       }

第三部はどうしようかな。

誰かが保存されたencを比較するのを手伝ってくれる場合にのみ。パスワードとログイン enc. パート1で作成したパスワード。

さらに情報が必要な場合はお知らせください。

ありがとうございました。

どんな助けでも大歓迎です。

4

1 に答える 1

0

サーバーで検証を行うときに、サーバーでパスワードとPINを再暗号化してみてください。暗号化関数を呼び出して比較を行うと、結果が得られれば、正しいパスワードが入力されたことがわかります。コードを変更すると、次のようになります。

try
{
   using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["STRING"].ConnectionString))
   {
     using (SqlCommand cmd = new SqlCommand("dbo.Res_User", con))
     {
       cmd.CommandText = "INSERT INTO Res_User(username, password, key_pin) SELECT '" + username + "' , dbo.fnEncDecRc4('" + pin + "','" + password + "'), '" + pin + "'";
       con.Open();
       cmd.ExecuteNonQuery();

       MessageBox.Show("Added", "Information", MessageBoxButtons.OK);

       cmd.CommandText = "SELECT password FROM Res_User WHERE username = @username AND key_pin = @pin AND password = dbo.fnEncDecRc4(@pin, @password)";
       cmd.Parameters.AddWithValue("@username", username);
       cmd.Parameters.AddWithValue("@pin", pin);
       cmd.Parameters.AddWithValue("@password", password);
       cmd.ExecuteNonQuery();

       using (SqlDataReader reader = cmd.ExecuteReader())
       {
           if (reader.HasRows)
           {
               //successfully validated.
           }
       }
于 2012-10-08T15:59:55.843 に答える