Как я могу декодировать двоичный ключ «кусков корня» в информационных метаданных файла .torrent в новом BitTorrent v2?

В BitTorrent v2 есть куски корневого ключа (строка) у которого есть root sha256 файла закодированного в бинарном виде, в документации написано:

«Корень частей» — это корневой хэш дерева Меркла с коэффициентом ветвления 2, построенный из блоков файла размером 16 КБ. Последний блок может быть короче 16 КБ. Оставшиеся хэши листьев за концом файла, необходимые для построения верхних слоев дерева Меркла, обнуляются. Начиная с мета-версии 2 SHA2-256 используется в качестве функции дайджеста для дерева меркла. Хэш хранится в двоичной форме, а не в виде удобочитаемой строки.

Мне нужно извлечь этот хэш, чтобы использовать его на моем торрент-трекере, чтобы на информационной веб-странице пользователи могли видеть оригинальные хэши торрент-файлов, как мне это сделать? Как я мог декодировать эту двоичную строку, и я не знаю, являются ли они конкатенацией всех хэшей частей.

PHP или C предпочтительнее или, может быть, некоторые документы. Я нуб в кодировании, поэтому, пожалуйста, объясните подробно. Благодаря тонну!!

Я попробовал функцию unpack(), но что-то упустил.

Что вы имеете в виду под "декодировать"? Можете ли вы поделиться образцом входных данных и ожидаемым результатом?

Nico Haase 26.01.2023 17:44

@NicoHaase Конечно, в новом информационном словаре торрентов BitTorrent v2 каждый файл содержит свой оригинальный хэш, закодированный в двоичной строке, короче, вы не можете прочитать его текстовым редактором, вот картинка i.postimg.cc/2y5SC7pd/2023- 01-26-085936.png, как видите закодировано, хочу расшифровать.

greenandgreen 26.01.2023 18:02

Пожалуйста, добавьте все пояснения к вашему вопросу, отредактировав его. Это также должно включать образец ввода и код, который вы использовали для решения вашей проблемы.

Nico Haase 26.01.2023 19:37

Почему вы хотите показать это значение пользователю? Что вы ожидаете, что они будут делать с ним?

Anon Coward 27.01.2023 03:29

@AnonCoward Много полезного из этого:

greenandgreen 27.01.2023 07:49

Я также собираюсь добавить возможность поиска по хешу, например. вы хотите скачать софт, внутри этого софта есть пакет, который никто не скачивал или только 1-2 человека с медленной раздачей, потому что торрент был обновлен и вы скачали старую версию, вы можете искать другие рои для этого пакета по его хешу , и это не совсем софт, это могут быть фильмы, документы, iso, мертвые артефакты и т.д.

greenandgreen 27.01.2023 07:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Хеш, хранящийся в торрент-файле, не закодирован, это его собственное представление, с которым работают компьютеры: последовательность байтов. В случае SHA2-256 это будет 32 байта (256 бит).

Если вам нужно, чтобы он был представлен в тексте, вам придется его закодировать. Есть много способов сделать это. Обычно используется шестнадцатеричный формат, который также часто используется для отображения информационного хеша торрента.

Я не знаю, являются ли они конкатенацией всех хэшей частей.

Как сказано в BEP, корень частей — это корневой хеш дерева Меркла , его нельзя получить конкатенацией хэшей отдельных блоков.

Его можно вычислить только из самого содержимого торрента. Поэтому, если у вас нет данных, вы не можете их пересчитать, вы можете только извлечь их из торрент-файла. Но поскольку он использует фиксированную конструкцию (независимую от размера фрагмента), корень фрагментов всегда одинаков для файлов одинакового содержания.

Блин, это слишком сложно для меня :( Мне нужно знать только корневой хэш sha2 каждого файла, чтобы показать его на веб-странице. Насколько я понял, мне нужно закодировать ключ "pieces root" в шестнадцатеричный? Был бы признателен, если бы Вы могли бы дать мне какой-нибудь код для этого.Не то, чтобы я не знаком со структурой торрента, просто я слаб в кодировании.

greenandgreen 27.01.2023 17:52

Ну, раз уж вы упомянули php, bin2hex должен выполнить эту работу после извлечения байтов из торрент-файла.

the8472 27.01.2023 18:06

Я постараюсь ответить, спасибо, это будет то же самое, что и исходный файл sha256, или что-то другое?

greenandgreen 27.01.2023 19:08

Я сделал это с библиотекой bencode php, просто чтобы быть уверенным, но, к сожалению, похоже, что я получаю хеш, который не совсем тот же, странно, не могли бы вы помочь в этом, пожалуйста? Вот код, корневой хэш и вывод bin2hex на одной картинке: i.postimg.cc/yNqW3nxV/2023-01-28-071853.png

greenandgreen 28.01.2023 16:27

Как я уже сказал, корневой хэш дерева Меркла — это не то же самое, что просто хеширование файла. Если бы это было так, нам бы не понадобилось построение дерева Меркла. Вам нужен корневой хэш частей, который вы получили. То, что это не соответствует вашим потребностям, кажется другим вопросом, проблемой XY.

the8472 29.01.2023 17:07

О, я вижу, на самом деле я ожидал, что это произойдет, поэтому в предыдущем комментарии я спросил — «такой же, как исходный файл sha256 или что-то другое?». Мой единственный вопрос сейчас заключается в том, как рассчитать одну и ту же версию дерева Меркла для отдельных файлов. Под этим я подразумеваю «дерево Меркла с коэффициентом ветвления 2, построенное из 16-килобайтных блоков файла…»? Я знаю, что утомил вас, но уверяю, что благодарен, и уже выбрал ваш ответ как принятый.

greenandgreen 29.01.2023 18:42

Собственно отвечать не надо, я нашел ответ, еще раз спасибо!

greenandgreen 29.01.2023 19:11

Святая корова, ChatGPT сделал мне рабочий код для этого

greenandgreen 30.01.2023 08:20

Я написал инструмент командной строки Windows для извлечения/вычисления корневых хэшей Merkle.

Его можно использовать для поиска нужных файлов среди трекеров, получивших поддержку BitTorrent v2, например, для поиска сидов для восстановления мертвых торрентов.

Использование:

Откройте командную строку и выполните следующие действия:

tmrr.exe example.torrent # For extracting root hashes from a torrent

tmrr.exe r your_file # For calculating Merkle root hash for a file

Инструмент выведет все корневые хэши файлов с их именами и размерами. Не стесняйтесь оставлять отзывы.

Я просмотрел словарь «дерево файлов», объединив все каталоги и имена файлов, извлек хэши файлов, передав каждый ключ «корневой фрагмент» функции bin2hex(), и скомпилировал этот код для окон.

Пожалуйста, добавьте все пояснения к своему ответу, отредактировав его, а не ссылаясь на внешние ресурсы.

Nico Haase 06.02.2023 17:16

Хотя почему минус

greenandgreen 07.02.2023 11:25

Другие вопросы по теме