Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较C#中用于电报登录的HMACSHA256哈希_C#_Telegram_Hmac - Fatal编程技术网

比较C#中用于电报登录的HMACSHA256哈希

比较C#中用于电报登录的HMACSHA256哈希,c#,telegram,hmac,C#,Telegram,Hmac,我正在按照官方教程实现一个网站的电报登录 将生成的哈希值与收到的哈希值进行比较时,字符串不匹配 我错过了什么 { string dataCheckString = $"auth_date={loginData.AuthDate}\nfirst_name={loginData.FirstName}\nid={loginData.Id}\nphoto_url={loginData.PhotoUrl}\nusername

我正在按照官方教程实现一个网站的电报登录

将生成的哈希值与收到的哈希值进行比较时,字符串不匹配

我错过了什么

        {
            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();
        }```



我猜问题在于,您的散列键实际上不是散列键,而是散列键的十六进制表示形式。尝试将Sha256更改为
public byte[]ShaHash(字符串值){using(var hasher=Sha256.Create()){return hasher.ComputeHash(Encoding.UTF8.GetBytes(value));}}
,并直接使用字节数组(实际哈希)作为hashmac函数的参数。完美
    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);
    }