Как вычислить хэш?
Как я могу вычислить хэш - торрент-файл с помощью PHP?
я использовал класс BEncoded
и это сработало, однако, хотел знать, как это работает.
2 answers
Торрент-файл имеет структуру данных с двумя ключами более высоком уровне: announce
- определение(s) tracker(s), которые будут использоваться для загрузки - info
- содержащий имена файлов и их хэши, отношение (частей, я думаю, но не уверен). Для создания ссылки "магнит", использует-infohash
именно хеш данных, закодированных info
. Шрифт.
То есть, если вычислить эту infohash
необходимо открыть файл торрент, интерпретировать их структуры и вычисления хэш соответствующей части (как я понимаю, чем приведенные выше, и не нужно декодирования всю структуру, но по-прежнему требуется , выделите ее в файле).
Нюанс в том, что, как infohash
- хеш-структуры , закодированной, BencodeModel
декодирует все, оказывается, было нужно кодировать снова соответствующей части, перед тем, как применить хеш:
-
Декодирует его и ловит в соответствующей части (
info
):$bencode = new BencodeModel(); $data = $bencode->decode_file($form->fields['filename']->saved_file); $hash = $torrentmanager->create_hash($data['info']);
-
Re-кодирует и вычисляет хэш:
function create_hash($info) { $bencode = new BencodeModel(); return urlencode(sha1($bencode->encode($info))); }
Имеет несколько форм в зависимости от цели.
Одним из наиболее распространенных является использование MD5. Это делается с помощью функции md5_file()
.
Вы Также можете использовать sha1_file()
это медленнее, но дает результат немного лучше.