Как получить значение info_hash файла .torrent

#c# #hash #sha1 #bittorrent #torrent

#c# #хэш #sha1 #bittorrent #торрент

Вопрос:

Я пытаюсь извлечь данные info_hash из файла .torrent, но не могу.

В настоящее время я провожу свой тест с этим торрент-файлом, но не нашел способа его получить. В документе говорится The 20 byte sha1 hash of the bencoded form of the info value from the metainfo file. Note that this is a substring of the metainfo file.

Но даже если я использую эту строку sha1, это неправильный хэш (я знаю, что такое правильный info_hash, потому что я отслеживал запрос uTorrent с помощью WireShark)

Я использую пакет Bencode из NuGet для чтения файла .torrent и извлекаю данные с помощью

 var bencode = BencodeUtility.DecodeDictionary(File.ReadAllBytes(torrentfile));

foreach (KeyValuePair<string, object> kvp in bencode)
{
  PrintKvp(kvp);
}
  

В PrintKvp(), когда я нахожу поле «info», я печатаю его с помощью:

 if (kvp.Key == "info")
{
SHA1Managed sha1 = new SHA1Managed();

Console.WriteLine("info_hash : "   Encoding.UTF8.GetString(sha1.ComputeHash(BencodeUtility.Encode(kvp.Value).ToArray())));
}
  

Но результат: info_hash : ?ò?3??GZ?YA?h???amp;?
Очевидно, что это не (читаемая человеком) строка sha1…
Как я могу получить хорошо закодированный info_hash? Спасибо.

Комментарии:

1. Если вам нужен удобочитаемый хэш, просто преобразуйте его с помощью Convert.ToBase64String() , вместо Encoding.UTF8.GetString() .

2. С помощью Convert. Для Base64String() результат таков rMOy5DPXx0dau1lBtWgct6HqJuI= , что он доступен для чтения человеком, но он по-прежнему не является исключенным возвратом:/ Файл хорошо отформатирован.

3. кодировка base64 rMOy5DPXx0dau1lBtWgct6HqJuI= совпадает с кодировкой в шестнадцатеричном ACC3B2E433D7C7475ABB5941B5681CB7A1EA26E2 формате, ожидаемый результат.

4. Спасибо @Encombe это именно то, что мне нужно: D