Как преобразовать битовый торрент 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