比较SHA2_512 C#和SQL Server

时间:2013-05-26 21:09:02

标签: c# asp.net sql-server

我想比较用户从ASP.NET站点登录到我在SQL Server中为他生成的One时的密码。

所以,我在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);

这两个哈希是非常不同的。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

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

尝试Encoding.Unicode

另外,请勿使用Encodingresult转换为字符串。它包含原始字节,而不是字符的编码。如果需要字符串,请将字节转换为hex digitsBase64