我想比较用户从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);
这两个哈希是非常不同的。
我哪里错了?
答案 0 :(得分:1)
NVARCHAR是一种16位编码 - 很可能是小端UTF-16。因此,HASHBYTES
可能会看到ComputeHash
的不同输入。
尝试Encoding.Unicode
。
另外,请勿使用Encoding
将result
转换为字符串。它包含原始字节,而不是字符的编码。如果需要字符串,请将字节转换为hex digits或Base64。