2011-08-02 102 views
2

有人能向我解釋爲什麼不T-SQL的爲什麼HashBytes和MD5CryptoServiceProvider()。ComputeHash不匹配?

SELECT substring(master.dbo.fn_varbintohexstr(hashbytes('MD5', 'HelloWorld')), 3, 32) 

和.NET的

Convert.ToBase64String(New System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.UTF8.GetBytes("HelloWorld"))) 

返回相同的結果?

TSQL返回68e109f0f40ca72a15e05cc22786f8e6和.net返回aOEJ8PQMpyoV4FzCJ4b45g==

回答

3

在.NET一個是BASE64,所述T-SQL一個爲hex它們是不同的編碼。

輸出的長度告訴你一點,因爲MD5提供16個字節(按照T-SQL的解決方案)

+0

(.NET一個是Base64,SQL不是) –

+2

順便說一下,你明確地說'轉換。 ToBase64String''所以它不應該是那麼令人驚訝? –

+1

白癡。謝謝 :) – Vnuk

0

因爲你問T-SQL,而你告訴.NET來返回編碼的字節HEX返回他們Base64編碼...這是非常不同的編碼,並且永遠不會匹配...