Почему не совпадают HashBytes и MD5CryptoServiceProvider (). ComputeHash? - PullRequest
2 голосов
/ 02 августа 2011

Может кто-нибудь объяснить мне, почему не T-SQL

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==

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

.net один - base64, T-SQL - шестнадцатеричный. Это разные кодировки.

Длина вывода также говорит вам об этом, потому что MD5 поставляет 16 байтов (согласно решению T-SQL)

0 голосов
/ 02 августа 2011

Поскольку вы просите T-SQL вернуть байты, закодированные в HEX-коде, в то время как вы говорите .NET, чтобы они возвращали их в кодировке Base64 ... это очень разные кодировки и никогда не совпадают ...

...