Как преобразовать битовый торрент info_hash (полученный из Wireshark) в хеш SHA1

Я использую Snort, который обнаруживает некоторую активность P2P, в частности запрос анонса BitTorrent. Я вижу запрос HTTP GET /announce.php?info_hash=XXX... и пытаюсь преобразовать этот XXX в правильный хэш SHA1, чтобы попытаться понять, что загружается.

Я читал разные вещи, в которых говорится, что это URL-код, а другие говорят, что просто удалите символ%, однако я не могу воспроизвести это.

Кто-нибудь может подсказать, как это сделать?

3 ответа

info_hash это хеш SHA1 Это двоичный хэш, закодированный в URL для включения в URL.

Если вы хотите превратить его в шестнадцатеричный хеш-код, вам нужно будет извлечь его из URL-адреса, декодировать URL-адрес и шестнадцатеричного кодирования. Например в Python:

>>> '%00%01%02%20%25ABC+XYZabc%7F%80%81%FE%FF'
'%00%01%02%20%25ABC+XYZabc%7F%80%81%FE%FF'
>>> urllib.unquote_plus(_)
'\x00\x01\x02 %ABC XYZabc\x7f\x80\x81\xfe\xff'
>>> _.encode('hex')
'00010220254142432058595a6162637f8081feff'

Нет вы можете,

infohash == sha1(torrentfile["info"])

Но вы можете использовать info_hash в качестве ключа для поиска в сети DHT

Хорошо, знаю, я знаю. info_hash это хеш SHA1 И пример этого: %5d%97%dbA%d7a%2b%92%f5%c2%ef%dcv%bf%e7%e6%03%24%85%0a, Если вы используете $_GET['info_hash'], это не будет работать, из-за %s. Вам нужно использовать $_SERVER['QUERY_STRING'], Пример кода, как получить SHA1-хэш info_hash в PHP:

$arye = $_SERVER['QUERY_STRING'];
$arye = explode('info_hash=', $arye)[1];
$arye = explode('&', $arye)[0];
$arye = explode('%', $arye);
$arp = '';
foreach($arye as $ara) {
    if (strlen($ara) == 2) {
        $arp .= $ara;
    }else{
        $e1 = substr($ara, 0, 2);
        $e2 = substr($ara, 2, 1);
        $e2 = unpack('H*', $e2)[1];
        $arp .= $e1;
        $arp .= $e2;
    }
}

echo $arp; // This will be your SHA1 hash

Хеш: %5d%97%dbA%d7a%2b%92%f5%c2%ef%dcv%bf%e7%e6%03%24%85%0a -> 5d97db41d7612b92f5c2efdc76bfe7e60324850a

Другие вопросы по тегам