0

我正在建立一个简单的密码保护网站。我正在使用以下函数来计算我在 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 哈希值不同,因此即使字符串相同,它们也不匹配。我不明白为什么会这样。我该如何解决这个问题?有没有更好的处理方法?

4

1 回答 1

0

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

现在已修复。

于 2013-11-12T16:15:43.013 回答