2013-05-26 96 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