Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Суммирование sha1 значений.


Автор: andrew_121 9.8.2009, 01:05
Здравствуйте.

Нужно узнать sha1 хэш значение контента, который скачивается torrent-файлом.
Т.е. В торрент файле есть хэш суммы каждого блока. Как их суммировать, чтоб узнать хэш всего контента? Торрент клиенты это умеют. Пересмотрел коды rTorrent, libtorrent, libtorrent-rasterbar. Но так ничего не понял.
Может кто знает?

Спасибо!

Автор: Alexandr87 9.8.2009, 09:02
Цитата(andrew_121 @  9.8.2009,  04:05 Найти цитируемый пост)
В торрент файле есть хэш суммы каждого блока. Как их суммировать, чтоб узнать хэш всего контента?

никак.

Автор: andrew_121 9.8.2009, 13:36
Alexandr87
Цитата(andrew_121 @  9.8.2009,  01:05 Найти цитируемый пост)
Торрент клиенты это умеют.


Автор: skyboy 9.8.2009, 14:39
Цитата(andrew_121 @  9.8.2009,  00:05 Найти цитируемый пост)
Торрент клиенты это умеют.

откуда информация?

Автор: andrew_121 9.8.2009, 22:01
Цитата(skyboy @  9.8.2009,  14:39 Найти цитируемый пост)
откуда информация? 

К примеру, uTorrent. Если, с отключенным интернетом, добавить торрент-файл, то он покажет хэш контента.

Автор: skyboy 9.8.2009, 23:44
а в торрент-файле, значит, хеш всего контента не хранится?

Автор: andrew_121 10.8.2009, 03:12
Цитата(skyboy @  9.8.2009,  23:44 Найти цитируемый пост)
а в торрент-файле, значит, хеш всего контента не хранится? 

Нет. Только хэши кусков. В том то и вопрос, как их суммировать?

Автор: Alexandr87 10.8.2009, 05:03
Цитата(andrew_121 @ 9.8.2009,  16:36)
Alexandr87
Цитата(andrew_121 @  9.8.2009,  01:05 Найти цитируемый пост)
Торрент клиенты это умеют.

Это невозможно алгоритмически.

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

Автор: andrew_121 10.8.2009, 06:17
Цитата(Alexandr87 @  10.8.2009,  05:03 Найти цитируемый пост)
Есть уверенность что они показывают именно значение sha1 функции всего контента?

Да, конечно. Скачиваете контент, хэшируете его любой тулзой, и сравниваете. Совпадают.

Цитата(Alexandr87 @  10.8.2009,  05:03 Найти цитируемый пост)
Может хэш функция с торрент файла, или еще какая-либо функция со  значения sha-1 значений для всех кусков? 

Не понял.

Автор: Dims 10.8.2009, 14:51
По логике действительно, это должно быть невозможно. Ведь хэш функция как правило даёт необратимый код, иначе его было бы легко подделать.

Поэтому я согласен с предыдущими ораторами: либо (1) в торрент файле хранятся не только коды кусков, но и код всего контента, (2) либо общий хеш код -- это не код всего контента, а, например, хэш-код всех кодов кусков.

Добавлено через 7 минут и 38 секунд
А вообще-то...

Я нашёл http://en.wikipedia.org/wiki/File:SHA-1.svg. Из неё мне понятно, как алгоритм преобразует 5 32-битных слов. Но что он делает, когда ему даётся больше, например, 10? Может быть, он разбивает их на пятёрки, преобразует, а потом просто суммирует результаты? Тогда из хэш-кодов кусков можно получить общий хэш код простым суммированием.


Автор: Dims 10.8.2009, 15:07
А каковы блоки в торренте? В sha1 тоже есть блоки по 512. Может быть это те самые блоки?

http://www.itl.nist.gov/fipspubs/fip180-1.htm

Автор: andrew_121 10.8.2009, 18:20
Цитата(Dims @  10.8.2009,  14:51 Найти цитируемый пост)
либо (1) в торрент файле хранятся не только коды кусков

Нет. В торрент-файле хранятся только хэш коды кусков.
Цитата

#  piece length: number of bytes in each piece (integer)
#  pieces: string consisting of the concatenation of all 20-byte SHA1 hash values, one per piece (byte string, i.e. not urlencoded)


Цитата(Dims @  10.8.2009,  14:51 Найти цитируемый пост)
(2) либо общий хеш код -- это не код всего контента, а, например, хэш-код всех кодов кусков.

Возможно. Сейчас проверю.

Цитата(Dims @  10.8.2009,  14:51 Найти цитируемый пост)
Я нашёл картинку в Википедии. Из неё мне понятно, как алгоритм преобразует 5 32-битных слов.

Да, так и есть. Именно эти значения записываются в торрент файл, в виде raw.

Цитата(Dims @  10.8.2009,  15:07 Найти цитируемый пост)
А каковы блоки в торренте?

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

Автор: Dims 10.8.2009, 20:25
Так что алгоритм делает, когда ему надо захешить файл длиннее 5 слов?

Автор: andrew_121 10.8.2009, 21:30
Цитата(Dims @  10.8.2009,  20:25 Найти цитируемый пост)
Так что алгоритм делает, когда ему надо захешить файл длиннее 5 слов? 

Не понял вопроса...

Автор: Dims 10.8.2009, 22:00
На картинке, как я понял, показано, как преобразовать пять 32-битных слов, что составляет 160 бит. А как преобразовать 10 слов? Ведь надо как-то агрегировать? 

Автор: Alexandr87 11.8.2009, 08:37
Цитата(andrew_121 @  10.8.2009,  09:17 Найти цитируемый пост)
Да, конечно. Скачиваете контент, хэшируете его любой тулзой, и сравниваете. Совпадают.

Вчера проверил. Не совпадают.

Так что, это не хэш всего контента.
Может быть это поле info_hash
http://wiki.theory.org/BitTorrentSpecification#Tracker_Request_Parameters 

Автор: andrew_121 11.8.2009, 15:50
Странно smile В таком случае это все упрощает.

Автор: cupper 9.10.2009, 22:03
Люди помогите понять их каких данных должна извлекаться хешсумма которая передается в info_hash при запросе на сервер ?
это поле pieces
или все идущее после поля info
не как немогу понять этого.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)