Что именно представляет собой info_Hash в торрент-файле
В последнее время я много читаю о хэше с торрентов, магнитных ссылок и т. д.
но есть вопрос, который я не понимаю.
У меня есть хэш файла и infohash торрента, является ли infohash = хэш файла?
Если да, то что, если торрент описания 6 файлов для загрузки?
Если нет, что это означает.
1 ответ
Вот и я наконец понял это.
"Infohash" - это хэш SHA1 над частью торрент-файла, который включает в себя:
- ПУНКТ: длина (размер) и путь (путь с именем файла)
- Имя: имя для поиска
- Длина куска: длина (размер) одного куска
- Pieces: SHA1 Хэш КАЖДОГО кусочка этого торрента
- Private: флаг для ограниченного доступа
Чтобы показать это немного подробнее, я взял случайный торрент-файл и использовал "BEncode Editor" от Ultima, чтобы сделать его более понятным для меня.
Как видите, в красном поле отмечена информационная часть торрент-файла. Торрент-файл включает в себя не хэш элементов, а хэши каждого элемента.
- Для item1 с: 1069496548
- и item2 с: 223
- Это вместе: 1069496771
- С размером куска: 524288
- Есть 2040 штук. (Приблизительно 1069496771/524288=2039.9032)
- Секция частей включает 40800 байт данных, что составляет 81600 + 2 символа в файле.
- +2, потому что 0x отмечает, что это шестнадцатеричное.
- Хеш SHA1 имеет 40 0x символов или 20 байт данных, что составляет 2040 хешей SHA1.
Я сожалею, что эта информация о торренте, который ведет к нелегальному фильму, но я хотел использовать действительно существующий торрент.
Я хотел добавить еще один пример, немного более конкретный.
Начнем с одного из самых маленьких .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 хэш из информации содержания словаря.
Мы хотим взять SHA-1 хэш значения из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
Какой правильный ответ:
Вот как получить соответствующий сегмент данных *.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
Содержимое ключа "информация" находится между (включительно) смещениями 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-ASCII4:info
, и терминал 0x65 â € ˜eâ € ™, â € ”, который связан с вышеупомянутым 0x64.