我正在尝试通过Telegram中的秘密聊天(〜类似自己的客户端)实现接收/发送消息,但在解释解密数据时遇到了一些问题。我已阅读schema,但无法将其与我的数据相匹配。
更具体一点:我收到一条消息(从官方客户端发送),单词“Test12”,解码结果(十六进制)为:
3C0000008917E31B0FF1C770B657C36AF705BDACA4BE2C0B2E0000000100000062000000DE91B0360000000038507C7CD5FA6F7C00 00000006 546573743132 00
我们可以在这里找到从57字节(粗体)开始的整个消息,并且(如果我没有记错的话)长度(斜体)。但是我如何匹配其他字节?在模式中说消息应该从8(盐)+ 8(session_id)+ 8(message_id)+ 4(seq_no)+ 4(message_data_length)= 32字节开始,而不是从57字节开始。
此外,当我尝试发送更长的消息(超过~256字节)时,“消息文本”从60字节开始,长度也编码有点奇怪:FE000400用于1024字节消息,FE000200用于512-字节(FE意味着什么?)。
那么,任何人都可以给我一个关于我做错的图式或线索吗?
答案 0 :(得分:2)
好吧,似乎我设法解码了大部分消息。可能对某些人有用:
3C000000“有价值”字节数(如果需要,不包括末尾随机字节的填充)
8917E31B(== 467867529),代码decryptedMessageLayer(第17层)
0FF1C770B657C36AF705BDACA4BE2C0B串行化随机字节数组(应至少包含15个字节),OF = 15 - 当前数量
2E000000似乎是最小层的数量
01000000 in_seq_no,(1 - 1)/ 2 =收到0条消息,请参阅Sequence numbers
62000000 out_seq_no,62/2 =已发送49封邮件,请参阅Sequence numbers(邮件发件人未启动该聊天)
DE91B036代码decryptedMessage#36b091de
<00> 00000000不知道 38507C7CD5FA6F7C似乎是randomId(可能应该与传输的消息一样?) <00> 00000000真的不知道,可能是ttl0654657374313200序列化字符串:前两个字节(06)的平均长度。如果超过254,则放置DE(= 254),并且可以从接下来的3个字节中找到长度(从我提到的'情况中的60位置开始)。字符串字节紧跟(表示Test12),并用0-3空字节(00)填充。
之后,结果用随机字节(0-15)填充,以形成完整的16字节块。