パスワードで保護されたシンプルな Web サイトを構築しています。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 ハッシュが異なるため、文字列が同じであっても一致しないことです。なぜこれが起こるのかわかりません。この問題を解決するにはどうすればよいですか? それを処理するより良い方法はありますか?