1

ユーザーが ASP.NET サイトからログインするときのパスワードと、SQL Server で生成したパスワードを比較したいと考えています。

したがって、次のように SQL サーバーでパスワード フィールドを生成します。

insert into users 
select 'username',  HASHBYTES('SHA2_512', CONVERT(nvarchar(4000),'password'))

C# でコードを記述します。

string text = Password;
            SHA512 alg = SHA512.Create();
            byte[] result = alg.ComputeHash(Encoding.UTF8.GetBytes(text));
            string hash = Encoding.UTF8.GetString(result);

そして、これら2つのハッシュは非常に異なります。

どこが間違っていますか?

4

1 に答える 1

1

NVARCHAR は 16 ビットのエンコーディングです。ほとんどの場合、リトル エンディアンの UTF-16 です。HASHBYTESしたがって、 は への別の入力を見ている可能性がありますComputeHash

試してみてくださいEncoding.Unicode

Encodingまた、文字列への変換には使用しないでくださいresult。文字のエンコーディングではなく、生のバイトが含まれます。文字列が必要な場合は、バイトを16 進数またはBase64に変換します。

于 2013-05-26T21:11:26.653 に答える