MD5哈希在ASP:NET中的不同页面上产生不同的结果

时间:2013-11-12 15:53:08

标签: asp.net md5

我正在建立一个简单的密码保护网站。我使用以下函数来计算我在stackoverflow上找到的MD5

protected string CalculateMd5Hash(string input)
        {
            // step 1, calculate MD5 hash from input 
            var md5 = MD5.Create();
            byte[] inputBytes = Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes); // step 2, convert byte array to hex string 
            var sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        } 

我有一个注册页面和一个登录页面。当用户注册时,我使用上面的函数来散列密码。

var user = new User
    {
        username = txtUsername.Text,
        password = CalculateMd5Hash(txtPassword.Text),

    };
db.Users.InsertOnSubmit(user);
db.SubmitChanges();

在登录页面中,我检查数据库中的用户和密码以查看它们是否匹配

var queryUserExists = (from u in db.Users
                       where u.username == txtUsername.Text && u.password == CalculateMd5Hash(txtPassword.Text)
                       select u).FirstOrDefault();

我的问题是从两个页面计算的MD5哈希是不同的,所以即使字符串是相同的它们也不匹配。我不明白为什么会这样。我该如何解决这个问题?有没有更好的方法来处理它?

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。当我按下提交并且数据库保存空字符串的MD5(D41D8CD98F00B204E9800998ECF8427E)时,注册页面显然会以某种方式创建一个空字符串。

现在已修复。