Pull to refresh

Вычисление MD5 хэша в .NET

Во время написания некого проекта на ASP.NET, мне понадобилось подключить к своему веб-сайту виджет авторизации ВКонтакте. Так как с JavaScript я вообще не знаком, а как таковых прямых примеров на подключение OpenAPI к веб-сайту я не нашел, возможно плохо искал, но скорее не было желания использовать чужую библиотеку, хотелось понять и изучить само подключение OpenAPI к моему веб-сайту. Я начал с тривиального, то-есть подключение виджета авторизации. Изучив небольшую документацию на сайте, принялся за дело.

Итак, я узнал, что last_name и прочие параметры передаются путем запросов. Собственно для проверки вошел ли пользователь используется зашифрованный MD5 хэш ID приложения, ID пользователя, и Secret key приложения. Отсюда логично то, что нужно путем обычных действий в C#, то-есть декодированием данного набора символов кодировкой UTF-8, вычислением хэша массива байтов и кодированием той-же кодировкой в string, получить зашифрованную строку. Но не тут то было…

Первый нерабочий пример:

static string OneTest()
{
byte[] hash = Encoding.UTF8.GetBytes("194253766748fTanppCrNSeuYPbA4ENCo");
MD5 md5 = new MD5CryptoServiceProvider();
string hashenc = Encoding.UTF8.GetString(md5.ComputeHash(hash));
return hashenc;
}

Результат: ?Q???&A%?1B??=

Второй нерабочий пример:

static string TwoTest()
{
byte[] hash = Encoding.ASCII.GetBytes("194253766748fTanppCrNSeuYPbA4ENCo");
MD5 md5 = new MD5CryptoServiceProvider();
string hashenc = Encoding.ASCII.GetString(md5.ComputeHash(hash));
return hashenc;
}

Результат: ?Q???&A%?1B??=

Рабочий пример:

static string FreeTest()
{
byte[] hash = Encoding.ASCII.GetBytes("194253766748fTanppCrNSeuYPbA4ENCo");
MD5 md5 = new MD5CryptoServiceProvider();
byte[] hashenc = md5.ComputeHash(hash);
string result = "";
foreach (var b in hashenc)
{
result += b.ToString("x2");
}
return result;
}

Результат: f10551c61d8f9d264125e1314287933d

На тот момент первый и второй результат меня очень удивили, не единой ошибки в методе, а тут данный набор символов. Наверняка в кодировке дело, свято думал я, но как видно из тестов, не верно.
Мне повезло что я попал на замечательный ресурс, честно не помню уже как называется, не суть важно. На этом ресурсе был описан алгоритм побайтового преобразования каждого символа в шестнадцатеричный символ, тем самым получая желаемый результат, то-есть хэш уже в string.
Спасибо.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.