2012-04-20 13 views
-4

私はユーザーアカウントテーブルを作成しました。ログインには2つのフィールドがあり、パスワードは暗号化された形式で保存されるユーザーIDとパスワードを格納します。パスワードはMD5ハッシュを使用して登録時に暗号化されます。ユーザーが自分のパスワードを変更したい場合、どのように変更するのですか?私は簡単な更新ステートメントを使用してパスワードを更新しようとしましたが、それは動作しませんでした。MD5を使用して暗号化されたパスワードをSQL Server 2005データベースに更新する方法

私のコードは次のとおりです。

//Code 

public int Changep(string strLogin, string strPassword, string newpass) 
    { 
     //Create a connection 
     string cs = "data source=DELL-PC;initial catalog=project;user id=sa;password=pass"; 
     SqlConnection objConn = new SqlConnection(cs); 


     // Create a command object for the query 
     string strSQL = "UPDATE tblLogins SET Password= @Password WHERE [email protected] AND Password = @Password2"; 

     SqlCommand objCmd = new SqlCommand(strSQL, objConn); 

     //Create parameters 
     SqlParameter paramUsername; 
     paramUsername = new SqlParameter("@Username", SqlDbType.VarChar, 25); 
     paramUsername.Value = strLogin; 
     objCmd.Parameters.Add(paramUsername); 

     //Encrypt the password 
     MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider(); 
     byte[] hashedBytes; 
     UTF8Encoding encoder = new UTF8Encoding(); 
     hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(strPassword)); 
     SqlParameter paramPwd; 
     paramPwd = new SqlParameter("@Password", SqlDbType.Binary, 16); 
     paramPwd.Value = hashedBytes; 
     objCmd.Parameters.Add(paramPwd); 

     //Encrypt the old password 
     MD5CryptoServiceProvider md5Hasher2 = new MD5CryptoServiceProvider(); 
     byte[] hashedBytes2; 
     UTF8Encoding encoder2 = new UTF8Encoding(); 
     hashedBytes2 = md5Hasher2.ComputeHash(encoder2.GetBytes(strPassword)); 
     SqlParameter paramPwd2; 
     paramPwd2 = new SqlParameter("@Password2", SqlDbType.Binary, 16); 
     paramPwd2.Value = hashedBytes; 
     objCmd.Parameters.Add(paramPwd2); 
     int iResults; 
     //Insert the record into the database 
     try 
     { 
      objConn.Open(); 
      //We use execute scalar, since we only need one cell 
      iResults = Convert.ToInt32(objCmd.ExecuteScalar().ToString()); 
      if(iResults==1) 
       return PassUpdated; 
      else 
       return Updatefailed; 
     } 
     catch 
     { 
      return Updatefailed; 
     } 
     finally 
     { 
      objConn.Close(); 
     } 
    } 
} 
+0

すぐにお返事ください。私は緊急にそれを必要とします – user1347081

+1

何がうまくいかないのですか?あなたが得ているエラーは何ですか? – coder

+1

何がうまくいかなかったのですか?どのようなエラーが発生していますか?あなたのテーブル定義は何ですか? – squillman

答えて

0

あなたは古いものと新しいパスワードの両方としてstrPasswordをハッシングしています。私は古いパスワードと新しいパスワードの両方を要求する必要があると思って、古いパスワードをWHERE句にハッシュします。

関連する問題