我正在建立一个简单的密码保护网站。我使用以下函数来计算我在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哈希是不同的,所以即使字符串是相同的它们也不匹配。我不明白为什么会这样。我该如何解决这个问题?有没有更好的方法来处理它?
答案 0 :(得分:0)
好的,我发现了问题。当我按下提交并且数据库保存空字符串的MD5(D41D8CD98F00B204E9800998ECF8427E)时,注册页面显然会以某种方式创建一个空字符串。
现在已修复。