0

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

4

1 に答える 1