C# 旧密码,新密码逻辑

C# 旧密码,新密码逻辑,c#,asp.net,C#,Asp.net,我想开发一个功能,我想检查任何用户谁改变了他的密码,应该不能再次输入相同的密码在新的密码字段。请查看代码以供参考,并让我知道如何添加该功能 <tr> <td class="a1">Old Password</td> <td><asp:TextBox ID="txtOldPassword" runat="server" CssClass="form_txtfld"></asp:Tex

我想开发一个功能,我想检查任何用户谁改变了他的密码,应该不能再次输入相同的密码在新的密码字段。请查看代码以供参考,并让我知道如何添加该功能

 <tr>
            <td class="a1">Old Password</td>
            <td><asp:TextBox ID="txtOldPassword" runat="server" CssClass="form_txtfld"></asp:TextBox>
            </td>
        </tr>

        <tr>
            <td class="a1">New Password</td>
            <td><asp:TextBox ID="txtNewPassword" runat="server" CssClass="form_txtfld"></asp:TextBox></td>
        </tr>

        <tr>
            <td class="a1">Confirm Password</td>
            <td><asp:TextBox ID="txtConfirmPassword" runat="server" CssClass="form_txtfld" ></asp:TextBox></td>
        </tr>
            <tr>
            <td>&nbsp;</td>
            <td>
                <asp:Button ID="btnSubmit" runat="server"  onclick="btnSubmit_Click" Text="Submit" style="width: 63px;" />&nbsp;
                <input type="reset" runat="server" name="Reset" style="width: 63px;" />
            </td>

旧密码
新密码
确认密码

相同的代码隐藏:-

protected void btnSubmit_Click(object sender, EventArgs e)
{

    String LoginID = Session["user"].ToString();
    String OldPassword = txtOldPassword.Text.Trim();
    String LoginPassword = txtNewPassword.Text.Trim();

    if (OldPassword != Session["password"].ToString())
    {
        String sc = "<Script>alert('Old Password does not match')</script>";
        ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "Ad" + DateTime.Now, sc, false);
    }
    else
    {
        LoginLogic _LoginLogic = new LoginLogic();
        _LoginLogic.ChangePassword(LoginID, LoginPassword);
        //Exit the current session
        Session.Abandon();
        String sc = "<Script>alert('You have successfully changed your password. Please login again.');location.href='default.aspx'</script>";
        ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "Ad" + DateTime.Now, sc, false);
    }
}
protectedvoid btnSubmit\u单击(对象发送方,事件参数e)
{
字符串LoginID=Session[“user”].ToString();
字符串OldPassword=txtOldPassword.Text.Trim();
String LoginPassword=txtNewPassword.Text.Trim();
if(OldPassword!=会话[“密码”].ToString()
{
String sc=“警报(‘旧密码不匹配’)”;
ScriptManager.RegisterClientScriptBlock(这个,typeof(Page),“Ad”+DateTime.Now,sc,false);
}
其他的
{
LoginLogic_LoginLogic=新的LoginLogic();
_LoginLogic.ChangePassword(LoginID,LoginPassword);
//退出当前会话
会话。放弃();
String sc=“警报('您已成功更改密码。请再次登录');location.href='default.aspx';
ScriptManager.RegisterClientScriptBlock(这个,typeof(Page),“Ad”+DateTime.Now,sc,false);
}
}
您只需要:

编辑

为了简单起见,我在代码中添加了执行检查的位。我不保证这种方法,因为您将密码存储为会话变量中的纯文本。然而,我想这是一个学校项目或其他什么,因此安全问题并不是一个真正的问题

        string LoginID = Session["user"].ToString();
        string OldPassword = txtOldPassword.Text.Trim();
        string LoginPassword = txtNewPassword.Text.Trim();

        if (OldPassword != Session["password"].ToString())
        {
            String sc = "<Script>alert('Old Password does not match')</script>";
            ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "Ad" + DateTime.Now, sc, false);
        }
        else if (string.Equals(OldPassword, LoginPassword)) //THIS LINE HERE
        {
            //Old password matches new password
        }
        else
        {
            LoginLogic _LoginLogic = new LoginLogic();
            _LoginLogic.ChangePassword(LoginID, LoginPassword);
            //Exit the current session
            Session.Abandon();
            String sc = "<Script>alert('You have successfully changed your password. Please login again.');location.href='default.aspx'</script>";
            ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "Ad" + DateTime.Now, sc, false);
        }
string LoginID=Session[“user”].ToString();
字符串OldPassword=txtOldPassword.Text.Trim();
string LoginPassword=txtNewPassword.Text.Trim();
if(OldPassword!=会话[“密码”].ToString()
{
String sc=“警报(‘旧密码不匹配’)”;
ScriptManager.RegisterClientScriptBlock(这个,typeof(Page),“Ad”+DateTime.Now,sc,false);
}
else if(string.Equals(OldPassword,LoginPassword))//这一行在这里
{
//旧密码与新密码匹配
}
其他的
{
LoginLogic_LoginLogic=新的LoginLogic();
_LoginLogic.ChangePassword(LoginID,LoginPassword);
//退出当前会话
会话。放弃();
String sc=“警报('您已成功更改密码。请再次登录');location.href='default.aspx';
ScriptManager.RegisterClientScriptBlock(这个,typeof(Page),“Ad”+DateTime.Now,sc,false);
}

但最简单的逻辑是将验证器与新旧密码文本框进行比较。

因此,您能为我提供更好的建议吗。任何逻辑都将有助于
会话[“密码”]
->某些内容已经出错。您不应该将密码以明文形式提供。看起来您不是在散列密码,我希望您不是以明文形式存储它们@TrevorPilley:不,不存储它们,因为它们是Session[“password”].ToString()和new password的值。如果你想跟踪所有的旧密码,用户在数据库中输入add字段,它从来不会检查我假设包含旧密码的文本框是否就是正在使用的密码(不是我的下一票)-我假设下一票是因为缺乏安全性不适合ASP.NET?你抽烟吗?是C#!OP想检查输入的新密码是否与旧密码匹配,这几乎是不可能的。看看标记,它要求用户输入旧密码(txtOldPassword)和新密码以及确认密码,所有用户输入。我最初的评论没有意识到op已经在尝试类似的操作。无论哪种方式-缺乏安全性,它不会检查旧密码是否已正确输入是的,但安全性不是他的问题。这可能是一个学校项目,而不是MI-6的项目。这个问题没有提到任何关于加密等的内容。谢谢@DrSchizo:它起作用了。我将把这些文本框作为其中三个的密码。谢谢!
String actualOld = Session["password"].ToString();
String OldPassword = txtOldPassword.Text.Trim();
String LoginPassword = txtNewPassword.Text.Trim();
if(actualOld!=OldPassword || LoginPassword==actualOld || LoginPassword==OldPassword  ){
      //error
}