Расшифровать торрент-хэш торрент-трекера scrape?
Я использую бенкодированную библиотеку PHP для декодирования бенкодированного ответа от трекера Bittorrent.
Ответ Трекера таков:
d5:filesd20:¼€™rÄ2ÞÊþVA .]á^¦d8:completei285e10:downloadedi22911e10:incompletei9eeee
После декодирования с использованием приведенного ниже кода:
require 'bencoded.php';
$be = new BEncoded;
//Response saved in scrape.txt
$data =file_get_contents('scrape.txt');
print_r($be->Decode($data));
Вывод:
Array ( [files] => Array ( [¼€™rÄ2ÞÊþVA .]á^¦] => Array ( [complete] => 285 [downloaded] => 22911 [incomplete] => 9 [isDct] => 1 ) [isDct] => 1 ) [isDct] => 1 )
Моя проблема моя проблема в приведенном выше выводе заключается в том, как расшифровать эти таинственные буквы в выводе.
2 answers
Ссылка: http://wiki.vuze.com/w/Scrape сообщение пользователя 3690414 в значительной степени объясняет, что означают разные ключи.
Для интерпретации необработанной бенкодированной строки:
d5:filesd20:¼€™rÄ2ÞÊþVA .]á^¦d8:completei285e10:downloadedi22911e10:incompletei9eeee
Вам нужно понять, как работает бенкодирование: https://wiki .theory.org/BitTorrentSpecification#Bencoding
Здесь наиболее важно знать, что каждая запись в бенкодированном словаре представляет собой Ключ, значение-пару.
Где Ключ - это байт строки
и значение одно из следующих видах: байтовую строку, целое число, а список, либо словарь.
Имея это в виду, необработанную строку можно разбить следующим образом:
d // The first d indicates the start of the Root dictionary
5:files // that has a Key with a 5 byte string name 'files',
d // the value of the 'files'-key is a second dictionary
20:¼€™rÄ2ÞÊþVA .]á^¦ // that has a Key 20 byte = 160 bit big endian SHA1 info-hash
d // the value of that key is a third dictionary
8:complete // that has a Key with a 8 byte string name 'complete',
i285e // the value of that key is a Integer=285
10:downloaded // that has a Key with a 10 byte string name 'downloaded',
i22911e // the value of that key is a Integer=22911
10:incomplete // that has a Key with a 10 byte string name 'incomplete',
i9e // the value of that key is a Integer=9
e // this e indicates the end of the third dictionary
e // this e indicates the end of the second dictionary
e // this e indicates the end of the Root dictionary
Надеюсь, это поможет понять вывод из 'bencoded.php ".
Редактировать.
Если вы хотите сделать 160-битный информационный хэш SHA1 с конечным порядком [¼€™RÄ2Þêva.]á^¦]
более удобочитаемый для человека, я предлагаю вам вывести его в виде 40-байтового шестнадцатеричного кода строка:0xBC801B9D9972C432DECAFE56410F092E5DE15EA6
Если вы имеете в виду искаженный ключ массива files
, то это необработанный инфохэш - ознакомьтесь со спецификацией: