2011-04-12 30 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

相關問題