Вычислить (sha1) "штук" при создании торрент-файла - PullRequest
1 голос
/ 01 марта 2012

Я почти закончил работу с моим торрент-сервером.Все, что мне теперь нужно сделать, это выяснить, как .torrent-файлы заполняют ключ «кусков» для информационного ключа.

В настоящее время у меня есть эта информация в моем торрент-файле, закодированном в формате utf-8.Хеш, который вы видите в конце, представляет собой заголовок файла TITLE, даже не близкий к длине в битах, которую я указал до двоеточия.Длина в битах для кусков была рассчитана с использованием (размер файла / длина куска) * 20 и округлена с использованием round ():

d8:announce64:http://www.valevarkasystems.com:40/torrents/tracker/announce.php  

8:encoding5:UTF-84:infod6:lengthi71711042e4:name25:Executive Meeting480p.flv

12:piece lengthi128000e6:pieces11205:òOìcØq¬rkÑzÎõyjZee

Как правильно рассчитать значение для ключа "куски" в конце?

Каждый раз, когда я пытаюсь открыть его в Transmission, он читается как поврежденный.

Использую ли я fopen (), беру кусок файла, который имеет длину куска, и создаю sha1хэш для каждой части, пока я не достигну конца файла?

Спасибо,

1 Ответ

2 голосов
/ 16 марта 2012

Да.Вы прочитали piece size количество байтов из файла, независимо проходили каждый фрагмент через SHA-1.Получившийся 20-байтовый дайджест SHA-1 - это ваш кусок, который помещается как двоичный файл в строку частей.

Если вы используете fopen() для чтения данных, убедитесь, чтооткройте файл в двоичном режиме (т.е. укажите «b» в качестве режима).В противном случае ваша среда выполнения может вставлять \ r всякий раз, когда встречается с \ n в потоке байтов.

В итоге вы должны получить (filesize + piece_length - 1) / piece_length количество частей, умноженное на 20, равно длине вашей строки pieces.

Похоже, вы работаете только с однофайловыми торрентами.Многофайловый торрент-случай более сложный.По сути, вам нужно представить, что все файлы в торренте объединяются, чтобы сформировать отображение из фрагмента в файл и смещение.

...