如何从跟踪器通知请求中解码info_hash信息?

时间:2011-04-12 14:55:25

标签: javascript url tracker

我有以下跟踪器请求:

"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()函数,但未返回预期结果。

2 个答案:

答案 0 :(得分:4)

对跟踪器的HTTP GET请求中存在的信息哈希可以按如下方式解码:

如果有'%'字符,则接下来的2个字符是原始40 char SHA-1哈希的一部分。

所以,你可以按如下方式打破编码的info_hash:

%92%c3 4 5%c0%28%15%e4 r r%b1 y%17%b7%cb s%0a%ef%9a%fc

前缀为'%'符号的所有2个char组都属于原始哈希值。

现在,剩余的角色。我们需要找到它们的相应Hex值。您可以使用ascitable作为参考。

例如,基数10中的4是十六进制中的34。

以这种方式将所有这些结合起来我们得到:

92c33435c02815e47272b17917b7cb730aef9afc - > torrent文件的SHA-1哈希。

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

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

这是Azureus格式。

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

解码过程可以轻松地使用Perl脚本自动完成。

答案 1 :(得分:0)

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

选择编码方法时:

escape()不会编码:@*/+

encodeURI()不会编码:~!@#$&*()=:/,;?+'

encodeURIComponent()不会编码:~!*()'

你可能正在研究某种形式的双重编码。