2012-03-28 12 views
2

現在私は少しプロジェクトを行っていますが、ユーザー登録パスワードフィールドはデータベースで暗号化されているため、md5アルゴリズムも使用してユーザーを認証する必要があります(暗号化されていない)正しいパスワードを入力するために入力しますが、後で私は入力したパスワードを理解しました。システムはデータベースで一致しなくてもそれを受け入れます。ASP.NETはmd5を使用してユーザーを認証します

私を助けることができますか?ここに私のコードは次のとおりです。

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 

     string pAssword = txtPassword.Text; 
     MD5CryptoServiceProvider encryptor = new MD5CryptoServiceProvider(); 
     byte[] encryptedValue; 
     UTF8Encoding encoder = new UTF8Encoding(); 
     encryptedValue = encryptor.ComputeHash(encoder.GetBytes(pAssword)); 

     DataSet ds = new DataSet(); 
     ds = (startWebService.getAllUsers()); 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      foreach (DataRow dRow in ds.Tables[0].Rows) 
      { 

       string userName = dRow["UserName"].ToString(); 
       string passWord = dRow["Password"].ToString(); 
       string acctNo = dRow["AccountNumber"].ToString(); 

       if (userName == txtUsername.Text.ToString() && acctNo == txtAcctNo.Text.ToString() && passWord == encryptedValue.ToString()) 
       { 
        FormsAuthentication.RedirectFromLoginPage(txtUsername.Text.ToString(), false); 
        lblError.Text = "You got it!"; 
        Response.Redirect("MyAccount.aspx"); 
       } 
       else 
       { 
        this.lblError.ForeColor = System.Drawing.Color.Red; 
        this.lblError.Text = "Either you have been type an incorrect network credentials or you have reached the maximum login attempts for your account.Please try again or contact the system administrator."; 

        startWebService.updateFailedLogin(txtAcctNo.Text.ToString(), txtUsername.Text.ToString()); 

       } 

      } 

     } 

    } 

私のWebサービス:

private DataSet GetDataSet(string strSPROC) 
    { 

     SqlConnection conn = new SqlConnection(connectionString); 
     SqlCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = strSPROC; 
     conn.Open(); 
     SqlDataAdapter myDataAdapter = new SqlDataAdapter(); 
     myDataAdapter.SelectCommand = cmd; 
     DataSet dsMT = new DataSet(); 
     myDataAdapter.Fill(dsMT); 
     return dsMT; 
     conn.Close(); 
    } 
    [WebMethod] 
    public DataSet getAllUsers() 
    { 
     return GetDataSet("ELMS_ALLINTERNETUSERS"); 
    } 

私は、システムの意志はI型例えば暗号化されたテキストの正しい同等のものを受け入れるような方法でこれを修正するために、私を助けてください:spain = wdhs3x9029しかし、私はフィリピンを入力しようとしましたが、それも受け入れます。

答えて

3

パスワードをハッシュ化のための素敵な組み込みの方法は、(あなたがそれでMD5を使用することができます)があります:

string encryptedValue = FormsAuthentication.HashPasswordForStoringInConfigFile(pAssword, "MD5"); 

あなたがこの方法hereについての詳細を読むことができます。代わりにバイト配列に簡単な.ToString()の

MD5CryptoServiceProvider encryptor = new MD5CryptoServiceProvider(); 
UTF8Encoding encoder = new UTF8Encoding(); 

byte[] encryptedValueBytes = encryptor.ComputeHash(encoder.GetBytes(pAssword)); 
StringBuilder encryptedValueBuilder = new StringBuilder(); 
for (int i = 0; i < encryptedValueBytes.Length; i++) 
{ 
    encryptedValueBuilder.Append(data[i].ToString("x2")); 
} 
string encryptedValue = encryptedValueBuilder.ToString(); 

:あなたは車輪の再発明する必要がある場合は、その後、私はあなたがより多くのこのような何かに文字列としてハッシュを得ることのあなたの方法を変更する提案します。

+0

このメソッド/クラスが推奨されていないことを示すFormsAuthentication.HashPasswordForStoringInConfigFileメソッドを使用すると、VS 2012から警告メッセージが表示されます。 –

関連する問題