В настоящее время я обрабатываю 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
Как проверить хэш бота Telegram с помощью C#? ⇐ C#
Место общения программистов C#
-
Anonymous
1729783851
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"
}
Подробнее здесь: [url]https://stackoverflow.com/questions/77951720/how-to-validate-telegram-bot-hash-with-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия