-4

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

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

//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 Login=@Username 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();
        }
    }
}
4

1 に答える 1

0

strPassword古いパスワードと新しいパスワードの両方としてハッシュしています。WHERE古いパスワードと新しいパスワードの両方の入力を求め、古いパスワードを句にハッシュする必要があると思います。

于 2012-04-20T17:08:58.560 に答える