You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TelegramClient C#发起通话?无法生成g_a_hash与PhoneProtocolCall

解决TelegramClient C#通话中g_a_hash与PhoneProtocolCall生成问题

核心步骤梳理

1. 严格实现DH密钥交换生成g_a_hash

g_a_hash是基于Telegram指定的Diffie-Hellman密钥交换流程生成的SHA-256哈希,必须遵循以下规范:

  • 使用官方指定的2048位素数p和生成元g(固定为2)
  • 生成随机私钥a,计算公钥g_a = pow(g, a, p)
  • 对g_a的大端字节序做SHA-256哈希得到g_a_hash

代码示例:

using System.Security.Cryptography;
using System.Numerics;

// Telegram官方标准2048位素数p
var p = BigInteger.Parse("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", NumberStyles.HexNumber);
var g = 2;

// 生成随机私钥a
using var rng = RandomNumberGenerator.Create();
var aBytes = new byte[256];
rng.GetBytes(aBytes);
var a = new BigInteger(aBytes);

// 计算公钥g_a并生成哈希
var g_a = BigInteger.ModPow(g, a, p);
using var sha256 = SHA256.Create();
var g_aBigEndian = g_a.ToByteArray(true); // 强制大端字节序
var g_a_hash = sha256.ComputeHash(g_aBigEndian);

2. 正确构造PhoneProtocolCall

PhoneProtocolCall需要匹配通话协议版本和密钥参数,注意以下要点:

  • 指定最新的协议层版本(建议用65)
  • 传入的p、g_a、g_a_hash必须和密钥交换流程完全一致
  • 所有大数参数需用大端字节序序列化

代码示例:

var protocol = new PhoneProtocolPhoneCall
{
    Layer = 65,
    G = g,
    P = p.ToByteArray(true),
    GaHash = g_a_hash,
    Ga = g_aBigEndian
};

// 发起通话请求时传入该协议对象
var callRequest = new RequestPhoneRequestCall
{
    UserId = targetUserId,
    RandomId = new Random().NextInt64(),
    GAHash = g_a_hash,
    Protocol = protocol
};

常见排查点

  • 确认TelegramClient库为最新版本:旧版本可能存在通话协议实现漏洞
  • 检查字节序:所有大数序列化必须用大端,否则哈希和协议验证会失败
  • 交叉验证DH计算:用官方测试值核对g^a mod p和哈希结果是否正确
  • 确保权限齐全:初始化客户端时需申请phone权限,否则无法调用通话接口

内容的提问来源于stack exchange,提问作者Анатолий

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:55:17