2011-08-02 3 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은 T-SQL 하나의 16 진수가 68e109f0f40ca72a15e05cc22786f8e6 및 .NET 반환 aOEJ8PQMpyoV4FzCJ4b45g==

답변

3

하나가 base64로 인 .NET입니다 반환합니다. 그들은 서로 다른 인코딩입니다.

출력의 길이는 당신이 당신이 .NET을 말할 때 인코딩 된 바이트의 HEX를 반환하는 T-SQL을 요구하고 있기 때문에 MD5는

+0

(.NET은 Base64, SQL은 아닙니다) –

+2

그리고 Vnuk의 말에 따르면, 당신은 명시 적으로 'Convert'라고 말합니다. ToBase64String'' 그래서 놀라지 않을 것입니다. –

+1

바보. 감사 :) – Vnuk

0

합니다 (T-SQL 솔루션에 따라) 16 바이트를 제공 너무 때문에 있음을 알려줍니다 반환 값 Base64로 인코딩 된 인코딩은 매우 다른 인코딩이며 절대 일치하지 않습니다 ...

관련 문제