Что такое info_Hash в торрент-файле

В последнее время много читаю про хеш с торрентов, и магнитные ссылки и т.д. Но есть вопрос, который мне не понятен.

У меня есть:

  • хэш файла
  • и инфохэш торрента

Является ли infohash = хэшем файла?

Если да, что, если торрент описывает 6 файлов для скачивания?

Если нет, что это означает?


person Emetiel    schedule 05.02.2015    source источник
comment
возможный дубликат вычисления хэша в торрент-клиентах   -  person Encombe    schedule 05.02.2015
comment
нет не правда, есть информация что инфохеш это хэш над инфочастью торрента. Но что такое информационная часть?   -  person Emetiel    schedule 05.02.2015
comment
I have the hash of a file and the infohash of a torrent, is the infohash = hash of the file ? Почему бы просто не посмотреть на них?!?   -  person Deanie    schedule 06.11.2018


Ответы (3)


Так что я, наконец, понял это.

«infohash» — это хэш SHA1 для части торрент-файла, которая включает в себя:

  1. ПУНКТ: длина (размер) и путь (путь с именем файла)
  2. Имя: имя для поиска
  3. Длина куска: длина (размер) одного куска
  4. Кусочки: SHA1 Хэш КАЖДОЙ части этого торрента
  5. Private: флаг для ограниченного доступа

Чтобы показать это немного больше, я взял случайный торрент-файл и использовал «редактор BEncode» от Ultima, чтобы сделать его более понятным для меня.

Редактор BEncode

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

  • Для элемента 1 с: 1069496548
  • и пункт2 с: 223
  • Это вместе: 1069496771
  • С размером куска: 524288
  • Есть 2040 штук. (1069496771/524288=2039,9032 приблизительно)
  • Секция кусков включает 40800 байт данных, что составляет 81600 + 2 символа в файле.
  • +2, потому что 0x отмечает, что это шестнадцатеричное число.
  • Хэш SHA1 имеет 40 символов 0x или 20 байт данных, что составляет 2040 хэшей SHA1.

введите здесь описание изображения

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

person Emetiel    schedule 19.02.2015
comment
Если вам понадобятся примеры в будущем, большинство дистрибутивов Linux предоставляют легальные торрент-загрузки своих выпусков. - person Tyzoid; 19.07.2016
comment
или попробуй мининову - person Mangat Rai Modi; 21.09.2016
comment
@Emetiel Как получить 20-байтовую строку info_hash? - person EmptyData; 18.11.2016

Я хотел добавить еще один пример, немного более конкретный.

Начнем с одного из самых маленьких .torrent файлов, которые у меня есть:

64 34 3A 69 6E 66 6F 64 35 3A 66 69 6C 65 73 6C 64 36 3A 6C 65 6E 67 74 
68 69 36 31 35 65 34 3A 70 61 74 68 6C 32 36 3A 66 72 65 65 20 61 75 64 
69 6F 62 6F 6F 6B 20 76 65 72 73 69 6F 6E 2E 74 78 74 65 65 64 36 3A 6C 
65 6E 67 74 68 69 33 39 33 34 31 37 65 34 3A 70 61 74 68 6C 36 31 3A 57 
61 72 63 72 61 66 74 5F 20 4F 66 66 69 63 69 61 6C 20 4D 6F 76 69 65 20 
4E 6F 76 65 6C 69 7A 61 74 69 6F 6E 20 62 79 20 43 68 72 69 73 74 69 65 
20 47 6F 6C 64 65 6E 2E 65 70 75 62 65 65 65 34 3A 6E 61 6D 65 36 31 3A 
57 61 72 63 72 61 66 74 5F 20 4F 66 66 69 63 69 61 6C 20 4D 6F 76 69 65 
20 4E 6F 76 65 6C 69 7A 61 74 69 6F 6E 20 62 79 20 43 68 72 69 73 74 69 
65 20 47 6F 6C 64 65 6E 20 45 50 55 42 31 32 3A 70 69 65 63 65 20 6C 65 
6E 67 74 68 69 31 30 34 38 35 37 36 65 36 3A 70 69 65 63 65 73 32 30 3A 
43 92 4C 22 BB 42 9E EA BD FF 66 C6 79 4C 29 E4 F9 D0 F3 B9 65 65

Если мы декодируем BEncoding:

64                                             ; DICTIONARY (d)
|  34 3A 69 6E 66 6F                           ;  - 4:info
|  64                                          ;  - DICTIONARY (d)
|  |  35 3A 66 69 6C 65 73                     ;     - 5:files
|  |  6C                                       ;     - LIST (l)
|  |  |  64                                    ;        - DICTIONARY (d)
|  |  |  |  36 3A 6C 65 6E 67 74 68            ;           - 6:length
|  |  |  |  69 36 31 35 65                     ;           - i615e
|  |  |  |  34 3A 70 61 74 68                  ;           - 4:path
|  |  |  |  6C                                 ;           - LIST (l)
|  |  |  |  |  32 36 3A 66 72 65 65 20 61 75   ;              - 26:free audiobook verison.txt
|  |  |  |  |  64 69 6F 62 6F 6F 6B 20 76 65   ;                  
|  |  |  |  |  72 73 69 6F 6E 2E 74 78 74      ;                  
|  |  |  |  65                                 ;              - END (e)
|  |  |  65                                    ;           - END (e)
|  |  |  64                                    ;           - DICTIONARY (d)
|  |  |  |  36 3A 6C 65 6E 67 74 68            ;              - 6:length
|  |  |  |  69 33 39 33 34 31 37 65            ;              - i393417e
|  |  |  |  34 3A 70 61 74 68                  ;              - 4:path
|  |  |  |  6C                                 ;              - LIST (l)
|  |  |  |  |  36 31 3A 57 61 72 63 72 61 66   ;                 - 61:Warcraft_ Official Movie Novelization by Christie Golden.epub
|  |  |  |  |  74 5F 20 4F 66 66 69 63 69 61   ;                  
|  |  |  |  |  6C 20 4D 6F 76 69 65 20 4E 6F   ;                  
|  |  |  |  |  76 65 6C 69 7A 61 74 69 6F 6E   ;                  
|  |  |  |  |  20 62 79 20 43 68 72 69 73 74   ;                  
|  |  |  |  |  69 65 20 47 6F 6C 64 65 6E 2E   ;                  
|  |  |  |  |  65 70 75 62                     ;                  
|  |  |  |  65                                 ;              - END (e)
|  |  |  65                                    ;           - END (e)
|  |  65                                       ;        - END (e)
|  |  34 3A 6E 61 6D 65                        ;        - 4:name
|  |  36 31 3A 57 61 72 63 72 61 66            ;        - 61:Warcraft_ Official Movie Novelization by Christie Golden EPUB 
|  |  74 5F 20 4F 66 66 69 63 69 61            ;         
|  |  6C 20 4D 6F 76 69 65 20 4E 6F            ;         
|  |  76 65 6C 69 7A 61 74 69 6F 6E            ;         
|  |  20 62 79 20 43 68 72 69 73 74            ;         
|  |  69 65 20 47 6F 6C 64 65 6E 20            ;         
|  |  45 50 55 42                              ;          
|  |  31 32 3A 70 69 65 63 65 20 6C            ;        - 12:piece length
|  |  65 6E 67 74 68                           ;         
|  |  69 31 30 34 38 35 37 36 65               ;        - i10485765e
|  |  36 3A 70 69 65 63 65 73                  ;        - 6:pieces
|  |  32 30 3A 43 92 4C 22 BB 42 9E            ;        - 20:43 92 4C 22 BB 42 9E EA BD FF 66 C6 79 4C 29 E4 F9 D0 F3 B9 65 65
|  |  EA BD FF 66 C6 79 4C 29 E4 F9            ;
|  |  D0 F3 B9                                 ;
|  65                                          ;     - END (e)
65                                             ;  - END (e)

Или в псевдо-json:

{
   info: {
      files: [
         { length: 615,    path: ["free audiobook verison.txt"] },
         { length: 393417, path: ["Warcraft_ Official Movie Novelization by Christie Golden.epub"] }
      ],
      name:           "Warcraft_ Official Movie Novelization by Christie Golden EPUB",
      "piece length": 10485765,
      pieces:         43 92 4C 22 BB 42 9E EA BD FF 66 C6 79 4C 29 E4 F9 D0 F3 B9 65 65
   }
}

InfoHash — это хэш информации

InfoHash – это хэш SHA-1 содержимого словаря info.

Мы хотим получить хэш SHA-1 value ключа словаря info:

64                                          ;  - DICTIONARY (d)
|  35 3A 66 69 6C 65 73                     ;     - 5:files
|  6C                                       ;     - LIST (l)
|  |  64                                    ;        - DICTIONARY (d)
|  |  |  36 3A 6C 65 6E 67 74 68            ;           - 6:length
|  |  |  69 36 31 35 65                     ;           - i615e
|  |  |  34 3A 70 61 74 68                  ;           - 4:path
|  |  |  6C                                 ;           - LIST (l)
|  |  |  |  32 36 3A 66 72 65 65 20 61 75   ;              - 26:free audiobook verison.txt
|  |  |  |  64 69 6F 62 6F 6F 6B 20 76 65   ;                  
|  |  |  |  72 73 69 6F 6E 2E 74 78 74      ;                  
|  |  |  65                                 ;              - END (e)
|  |  65                                    ;           - END (e)
|  |  64                                    ;           - DICTIONARY (d)
|  |  |  36 3A 6C 65 6E 67 74 68            ;              - 6:length
|  |  |  69 33 39 33 34 31 37 65            ;              - i393417e
|  |  |  34 3A 70 61 74 68                  ;              - 4:path
|  |  |  6C                                 ;              - LIST (l)
|  |  |  |  36 31 3A 57 61 72 63 72 61 66   ;                 - 61:Warcraft_ Official Movie Novelization by Christie Golden.epub
|  |  |  |  74 5F 20 4F 66 66 69 63 69 61   ;                  
|  |  |  |  6C 20 4D 6F 76 69 65 20 4E 6F   ;                  
|  |  |  |  76 65 6C 69 7A 61 74 69 6F 6E   ;                  
|  |  |  |  20 62 79 20 43 68 72 69 73 74   ;                  
|  |  |  |  69 65 20 47 6F 6C 64 65 6E 2E   ;                  
|  |  |  |  65 70 75 62                     ;                  
|  |  |  65                                 ;              - END (e)
|  |  65                                    ;           - END (e)
|  65                                       ;        - END (e)
|  34 3A 6E 61 6D 65                        ;        - 4:name
|  36 31 3A 57 61 72 63 72 61 66            ;        - 61:Warcraft_ Official Movie Novelization by Christie Golden EPUB 
|  74 5F 20 4F 66 66 69 63 69 61            ;         
|  6C 20 4D 6F 76 69 65 20 4E 6F            ;         
|  76 65 6C 69 7A 61 74 69 6F 6E            ;         
|  20 62 79 20 43 68 72 69 73 74            ;         
|  69 65 20 47 6F 6C 64 65 6E 20            ;         
|  45 50 55 42                              ;          
|  31 32 3A 70 69 65 63 65 20 6C            ;        - 12:piece length
|  65 6E 67 74 68                           ;         
|  69 31 30 34 38 35 37 36 65               ;        - i10485765e
|  36 3A 70 69 65 63 65 73                  ;        - 6:pieces
|  32 30 3A 43 92 4C 22 BB 42 9E            ;        - 20:43 92 4C 22 BB 42 9E EA BD FF 66 C6 79 4C 29 E4 F9 D0 F3 B9 65 65
|  EA BD FF 66 C6 79 4C 29 E4 F9            ;
|  D0 F3 B9                                 ;
65                                          ;     - END (e)

Прогоняем все эти байты вместе:

64 35 3A 66 69 6C 65 73 6C 64 36 3A 6C 65 6E 67 74 68 69 36 31 35 65 34 
3A 70 61 74 68 6C 32 36 3A 66 72 65 65 20 61 75 64 69 6F 62 6F 6F 6B 20 
76 65 72 73 69 6F 6E 2E 74 78 74 65 65 64 36 3A 6C 65 6E 67 74 68 69 33 
39 33 34 31 37 65 34 3A 70 61 74 68 6C 36 31 3A 57 61 72 63 72 61 66 74 
5F 20 4F 66 66 69 63 69 61 6C 20 4D 6F 76 69 65 20 4E 6F 76 65 6C 69 7A 
61 74 69 6F 6E 20 62 79 20 43 68 72 69 73 74 69 65 20 47 6F 6C 64 65 6E 
2E 65 70 75 62 65 65 65 34 3A 6E 61 6D 65 36 31 3A 57 61 72 63 72 61 66 
74 5F 20 4F 66 66 69 63 69 61 6C 20 4D 6F 76 69 65 20 4E 6F 76 65 6C 69 
7A 61 74 69 6F 6E 20 62 79 20 43 68 72 69 73 74 69 65 20 47 6F 6C 64 65 
6E 20 45 50 55 42 31 32 3A 70 69 65 63 65 20 6C 65 6E 67 74 68 69 31 30 
34 38 35 37 36 65 36 3A 70 69 65 63 65 73 32 30 3A 43 92 4C 22 BB 42 9E 
EA BD FF 66 C6 79 4C 29 E4 F9 D0 F3 B9 65

А затем возьмите хэш SHA-1 для создания 160-битного (20-байтового) дайджеста:

7EDA978ED7628595BB91C48B947F025BAE78CB77

Какой правильный ответ:

введите здесь описание изображения

person Ian Boyd    schedule 09.02.2020

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

Я сделал это для примера.

0000000: 6438 3A61 6E6E 6F75 6E63 6530 3A31 303A  d8:announce0:10:
0000010: 6372 6561 7465 6420 6279 3133 3A6D 6B74  created by13:mkt
0000020: 6F72 7265 6E74 2031 2E30 3133 3A63 7265  orrent 1.013:cre
0000030: 6174 696F 6E20 6461 7465 6931 3537 3037  ation datei15707
0000040: 3530 3238 3565 343A 696E 666F 6436 3A6C  50285e4:infod6:l
0000050: 656E 6774 6869 3230 6534 3A6E 616D 6534  engthi20e4:name4
0000060: 3A70 7269 7631 323A 7069 6563 6520 6C65  :priv12:piece le
0000070: 6E67 7468 6932 3632 3134 3465 363A 7069  ngthi262144e6:pi
0000080: 6563 6573 3230 3AF1 D7EE 4236 3434 D06F  eces20:...B644.o
0000090: 27C4 BBAD 87F0 F089 7A22 2B37 3A70 7269  '.......z"+7:pri
00000a0: 7661 7465 6931 6565 65                   vatei1eee

Содержимое ключа «info» находится между (включительно) смещениями 0x4D и 0xA7. Так…

#!/crit/shell/bsh
bbe  \
    -e '
        d 0x0 0x4C ;
        d 0xA8 * ;
      '  \
    ${example}   \
 |
shasum  -a 1  -b

Вы должны увидеть это:

1799a58b9f8ff2b9b9bcecd0d438c5f37f19a31c *-

Вот вывод xxd вместо shasum для большего пояснения:

0000000: 6436 3A6C 656E 6774 6869 3230 6534 3A6E  d6:lengthi20e4:n
0000010: 616D 6534 3A70 7269 7631 323A 7069 6563  ame4:priv12:piec
0000020: 6520 6C65 6E67 7468 6932 3632 3134 3465  e lengthi262144e
0000030: 363A 7069 6563 6573 3230 3AF1 D7EE 4236  6:pieces20:...B6
0000040: 3434 D06F 27C4 BBAD 87F0 F089 7A22 2B37  44.o'.......z"+7
0000050: 3A70 7269 7661 7465 6931 6565            :privatei1ee

Вы можете обратиться к Спецификации протокола BitTorrent для объяснения, хотя и краткого и довольно грамматически неэлегантный, что касается их номенклатуры и того, почему последний 0x65 должен быть исключен. Кратко: все данные заключены в пару US-ASCII «d» и «e»; содержимое ключа или поля «информация» также заключено в оболочку. Вам нужно все между первым 0x64 — «d», — который следует за строкой US-ASCII 4:info, и конечным 0x65 — «e», — который связан с вышеупомянутым 0x64.

person can-ned_food    schedule 11.10.2019