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);

这两个哈希值非常不同。

我哪里错了?

4

1 回答 1

1

NVARCHAR 是一种 16 位编码——很可能是小端 UTF-16。HASHBYTES因此,可能会看到不同的输入ComputeHash

试试Encoding.Unicode

另外,不要Encoding用于转换result为字符串。它包含原始字节,而不是字符编码。如果需要字符串,请将字节转换为十六进制数字Base64

于 2013-05-26T21:11:26.653 回答