2013-05-26 161 views
1

我想比较用户从ASP.NET站点登录时的密码到我在SQL Server中为他生成的密码。比较SHA2_512 C#和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); 

那两个哈希有很大的不同。

我在哪里错了?

+1

对于密码,SHA 512太快。使用salted bcrypt。 – SLaks

+0

哈希结果不是有效的UTF8。使用Base64。 – SLaks

回答

1

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

尝试Encoding.Unicode

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