我正在運行檢測一些P2P活動的Snort,特別是BitTorrent公佈請求。我看到HTTP GET /announce.php?info_hash=XXX ...請求,並且我試圖將此XXX轉換爲適當的SHA1哈希以嘗試瞭解正在下載的內容。如何將Bit Torrent info_hash(從Wireshark獲取)轉換爲SHA1哈希
我讀過各種說這是URL編碼的東西,以及其他人說只是刪除%字符 - 但我無法重現這一點。
任何人都可以建議如何做到這一點?
我正在運行檢測一些P2P活動的Snort,特別是BitTorrent公佈請求。我看到HTTP GET /announce.php?info_hash=XXX ...請求,並且我試圖將此XXX轉換爲適當的SHA1哈希以嘗試瞭解正在下載的內容。如何將Bit Torrent info_hash(從Wireshark獲取)轉換爲SHA1哈希
我讀過各種說這是URL編碼的東西,以及其他人說只是刪除%字符 - 但我無法重現這一點。
任何人都可以建議如何做到這一點?
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'
好吧,知道我知道。 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']
。 代碼示例如何獲得info_hash的SHA1哈希在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%分貝%D7A%2B%92%F5%C2%EF%DCV%BF%E7%E6%03 %24%85%0A - > 5d97db41d7612b92f5c2efdc76bfe7e60324850a
沒有,你可以,
infohash == sha1(torrentfile["info"])
但是你可以使用info_hash作爲關鍵字來搜索它DHT網絡上
值得一提的是,雖然這是一個SHA1哈希,它可以用base32編碼當在URL中時。 – 2015-02-22 15:49:36