Я внедряю логин телеграммы для веб-сайта, следуя официальному учебнику https://core.telegram.org/widgets/login#checking-authorization
, сравнивая сгенерированный хеш с полученным хешем, строка не совпадает. Чего мне не хватает?
{
string dataCheckString =
$"auth_date={loginData.AuthDate}\nfirst_name={loginData.FirstName}\nid={loginData.Id}\nphoto_url={loginData.PhotoUrl}\nusername={loginData.Username}";
var secretKey = Sha256Hash("<bot_token>");
var myHash = HashHmac(Encoding.UTF8.GetBytes(secretKey), Encoding.UTF8.GetBytes(dataCheckString));
var myHashStr = Concat(myHash.Select(i => i.ToString("x2")));
if (myHashStr == loginData.Hash)
{
// Data is from telegram
}
return NotFound();
}```
private static string Sha256Hash(string value)
{
using (SHA256 hash = SHA256.Create())
{
return Concat(hash.ComputeHash(Encoding.UTF8.GetBytes(value)).Select(i => i.ToString("x2")));
}
}
private static byte[] HashHmac(byte[] key, byte[] message)
{
var hash = new HMACSHA256(key);
return hash.ComputeHash(message);
}