Как проверить хэш бота Telegram с помощью C#?C#

Место общения программистов C#
Ответить
Anonymous
 Как проверить хэш бота Telegram с помощью C#?

Сообщение Anonymous »

В настоящее время я обрабатываю URL-адрес, полученный после нажатия кнопки входа в систему. Это включает в себя исключение хеша, сортировку параметров в алфавитном порядке, их форматирование как ключ=значение и использование \n в качестве разделителя.
Я использовал SHA256 для обработки своего секретного ключа, а затем зашифровал свой строка с обработанным секретным ключом. Однако при сравнении с хешем моего URL-адреса они различаются.
Где я могу ошибаться?
Кроме того, у меня есть пара вопросов:
Нужно ли расшифровывать значение photo_url? Поскольку исходный формат выглядит как https%3A%2F%2Ft.me.
Нужно ли перед обработкой преобразовать строку в нижний регистр?
Спасибо.

public IActionResult GetTelegram([FromQuery] Dictionary queryParams)
{
if (!queryParams.TryGetValue("hash", out var hash) || string.IsNullOrEmpty(hash))
{
return BadRequest("Missing hash parameter");
}
queryParams.Remove("hash");

if (queryParams.ContainsKey("photo_url"))
{
queryParams["photo_url"] = WebUtility.UrlDecode(queryParams["photo_url"]);
}

var dataCheckString = string.Join("\n", queryParams.OrderBy(kv => kv.Key)
.Select(kv => $"{kv.Key}={kv.Value}"));

var secretKey = ShaHash("Bot_Token");

var myHash = HashHmac(secretKey, Encoding.UTF8.GetBytes(dataCheckString));

var myHashStr = string.Concat(myHash.Select(i => i.ToString("x2")));
if (myHashStr == hash)
{
return Ok("success。");
}
else
{
return Unauthorized("fail。");
}
}

private static byte[] ShaHash(string value)
{
using (SHA256 hash = SHA256.Create())
{
return hash.ComputeHash(Encoding.UTF8.GetBytes(value));
}
}

private static byte[] HashHmac(byte[] key, byte[] message)
{
using (var hash = new HMACSHA256(key))
{
return hash.ComputeHash(message);
}
}

Я использую такие параметры:
{
"id": "xxxxx",
"first_name": "xxxxx",
"username": "xxxxxx",
"photo_url": "https%3A%2F%2Ft.me%xxxxxx.jpg",
"auth_date": "xxxxx",
"hash": "xxxxxxxxx"
}


Подробнее здесь: https://stackoverflow.com/questions/779 ... ash-with-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»