сравнение хеша HMACSHA256 в C # для входа в телеграмму - PullRequest
0 голосов
/ 13 октября 2019

Я внедряю логин телеграммы для веб-сайта, следуя официальному учебнику 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);
    }

...