#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