MD5登陆验证问题!Passwd密码字段设置为nvarchar,用户注册的时候用MD5(32位)加密并存储,现在登陆出现问题.
怎么登陆验证Passwd里面经过加密的密码?请大哥详细的帮我写一下,急!!! private void button1_Click(object sender, EventArgs e)
        {
            string st;
            st = lblusername.Text.ToString();
            string strPwd = "";
            strPwd = lblpassword.Text.ToString();
            for (int i = 0; i < DT.Rows.Count; i++)
            {
                if (st.Trim() == DT.Rows[i]["UserName"].ToString().Trim())
                {
                    if (strPwd.Trim() == DT.Rows[i]["Passwd"].ToString().Trim())
                    {                        this.DialogResult = DialogResult.OK;//成功                         //在Program.cs中写                        // static void Main()
                        //{
                        //Application.EnableVisualStyles();
                        //Application.SetCompatibleTextRenderingDefault(false);
                        // login  fm = new login();
                        //if (fm.ShowDialog() == DialogResult.OK)
                        // {
                        //  Application.Run(new FrmMain());
                        // }
                        //login  form1 = new login ();
                        //form1.Close();
                        //FrmMain  form2 = new FrmMain ();
                        //form2.Show();
                    }
                    else
                    {
                        MessageBox.Show("你的用户名或密码不正确,请重新输入!");
                        return;
                    }
                }

解决方案 »

  1.   

    你先用MD5来加密textBox( 也就是你输入密码的那个框)
    然后再用加密完的值与数据库中的字段比较就可以了啊
      

  2.   

    whChina能帮我写一段吗,就差这一点了
      

  3.   

    我没有测试,你自己试一下吧,反正StringToMD5Hash函数就是把你的那个密码在进行一次MD5加密的。private void button1_Click(object sender, EventArgs e) 
            { 
                string st; 
                st = lblusername.Text.ToString(); 
                string strPwd = ""; 
                strPwd = lblpassword.Text.ToString(); 
                for (int i = 0; i < DT.Rows.Count; i++) 
                { 
                    if (st.Trim() == DT.Rows[i]["UserName"].ToString().Trim()) 
                    { 
                        if (StringToMD5Hash(strPwd.Trim()) == DT.Rows[i]["Passwd"].ToString().Trim()) 
                        {                         this.DialogResult = DialogResult.OK;//成功                         //在Program.cs中写                         // static void Main() 
                            //{ 
                            //Application.EnableVisualStyles(); 
                            //Application.SetCompatibleTextRenderingDefault(false); 
                            // login  fm = new login(); 
                            //if (fm.ShowDialog() == DialogResult.OK) 
                            // { 
                            //  Application.Run(new FrmMain()); 
                            // } 
                            //login  form1 = new login (); 
                            //form1.Close(); 
                            //FrmMain  form2 = new FrmMain (); 
                            //form2.Show(); 
                        } 
                        else 
                        { 
                            MessageBox.Show("你的用户名或密码不正确,请重新输入!"); 
                            return; 
                        } 
                    }
    public static string StringToMD5Hash(string inputString)

    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
    byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < encryptedBytes.Length; i++)
    {
    sb.AppendFormat("{0:x2}", encryptedBytes[i]);
    }
            return sb.ToString
    }
      

  4.   

    StringToMD5Hash换成UserMd5这个函数也行,没什么区别,就一行代码写法不一样,怕你看不懂。结帖结帖!!  protected string UserMd5(string str1) 
      { 
        string cl1 = str1; 
        string pwd = ""; 
        MD5 md5 = MD5.Create(); 
        // 加密后是一个字节类型的数组 
         byte[] s=md5.ComputeHash(Encoding.Unicode.GetBytes(cl1)); 
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 
         for(int i = 0 ; i < s.Length; i++) 
        { 
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
             pwd = pwd + s[i].ToString("x"); 
        } 
        return pwd; 

      

  5.   

    MD5CryptoServiceProvider这个缺少using指令,我加了using System.MD5CryptoServiceProvider;生成有错误
      

  6.   

    using System.Security.Cryptography;
      

  7.   

    还有关键一点我的是32进制这个是16进制的,最后一点了请再指点一下!!!!
    protected   string   UserMd5(string   str1)   
        {   
            string   cl1   =   str1;   
            string   pwd   =   " ";   
            MD5   md5   =   MD5.Create();   
            //   加密后是一个字节类型的数组   
              byte[]   s=md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));   
            //   通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得   
              for(int   i   =   0   ;   i   <   s.Length;   i++)   
            {   
                    //   将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符   
                      pwd   =   pwd   +   s[i].ToString( "x ");   
            }   
            return   pwd;   
    }   
      

  8.   

    就是25d55ad283aa400af464c76d713c07ad这种