2011-04-12 70 views
3

我有以下要求追踪:如何解码来自追踪器公告请求的info_hash信息?

"info_hash=%92%c345%c0%28%15%e4rr%b1y%17%b7%cbs%0a%ef%9a%fc&peer_id=-UT2210-%2abP%b2%c23~NaN7-%7c%0f%1f&port=56541&uploaded=0&downloaded=0&left=461680&corrupt=0&key=6AD19369&event=started&numwant=200&compact=1&no_peer_id=1" 

,我想解码JavaScript中的info_hashpeer_id领域。 我试过unescape(),decodeURI()decodeURIComponent()函数,但它们没有返回预期的结果。

+0

所有%nn三元组都是该字节的十六进制表示形式,其他所有内容都没有编码,您想对二进制数据做什么? – 2011-04-12 16:01:51

+0

我想我可以得到一个更好的表示,这一个。目的是建立一个跟踪器,我对应该进入数据库的信息感到困惑。 – George 2011-04-14 10:20:26

+0

事实证明,最好的代表是那个,我不应该解码它。我会用它的方式。 – George 2011-04-21 08:25:17

回答

4

信息存在于HTTP GET请求给跟踪散列可以如下被解码:

如果有一个“%”字符,然后在接下来的2个字符是原来的40炭SHA-1的一部分哈希值。

所以,可以打破编码info_hash如下:

%92%C3 4 5%CO%28%15%E4 RR%B1 Y%17%B7%CB S%0A%EF%9A %fc

所有以'%'符号为前缀的2个字符组都属于原始散列。

现在,剩下的字符。我们需要找到它们相应的十六进制值。你可以使用asciitable作为参考。

例如,基数10中的4是十六进制数34。 > torrent文件的SHA-1散列 -

92c33435c02815e47272b17917b7cb730aef9afc:

这样我们的结合在一起。

peer_id将为我们提供有关客户端名称和版本的信息。在这种情况下:

-UT2210-%2abP%B2%C23〜NaN7-%7C%0F%1F

这是Azureus的格式。

UT对应于μTorrent,2210给出了我们的版本。

解码过程可以使用Perl脚本轻松实现自动化。

+0

很好的解释!非常感谢! – Rugal 2015-08-22 03:13:55

0

您用于“解码”的方法取决于它是如何被“编码”的。

当选择的编码方法:

逃逸()将不编码:@*/+

是encodeURI()将不编码:[email protected]#$&*()=:/,;?+'

encodeURIComponent方法()将不编码:~!*()'

你可能正在寻找某种形式的双重编码。

+0

这是主要问题:我不知道它是如何编码的,所以我无法解码它。 – George 2011-04-12 15:34:25

相关问题