2012-06-09 27 views
2

我正在抓取網站的信息,它涉及到sha1哈希鏈接。沙1哈希和他們的長度與洪流協議(磁鐵)?

我用一個簡單的preg_match_all得到了所有的磁鐵鏈接,但是在我的結果中,我得到了奇怪的結果,據我所知,它的十六進制形式的磁鐵哈希長度爲40個字符,但是我也得到返回字符串的結果長度爲32個字符,包含其他非十六進制值。

從我的結果,磁鐵鏈路中首先是正常的40位散列,

array 
    0 => string 'F5AD2D170C033736FD987106F04C3ABD6DF41D14' (length=40) 

而另一個奇怪的結果有兩個例子,我不明白的地方哈希是32個非十六進制值,

array 
    0 => string 'VPR33QQM3L6BFU5FGOZXMBNORAFFSZWW' (length=32) 

散列是否以某種方式打包?我知道這不是用pack('H*', $hash)完成的,因爲它會返回哈希的二進制數?磁鐵鏈接按照我測試過的方式工作。

更多,所以你可以看到在使用這些散列在這個網站

http://eztv.it

將鼠標懸停在磁鐵的聯繫和尋找一個磁鐵哈希值。

感謝

+1

這是其他磁鐵信息,你的正則表達式(這是一個可怕的方式來解析一個HTML頁面)也必須抓住跟蹤信息。 –

+0

@AlexLunix我不關於其他信息,我在談論第二個例子中的散列,長度爲32? – Griff

回答

4

磁鏈接中的哈希可以使用Base32進行編碼。在你的榜樣,

VPR33QQM3L6BFU5FGOZXMBNORAFFSZWW 

變成

ABE3BDC20CDAFC12D3A533B37605AE880A5966D6 

這是一個有效的SHA-1散列。

+0

謝謝你,我之後,:) – Griff

+0

PHP網站將不會加載,任何想法如何我可以將這些在PHP中轉換爲原始的十六進制格式?謝謝 – Griff

+0

@Griff:據我所知PHP沒有內置的方式來解碼base32。有庫可以做到這一點,雖然 – Chris

0

基本上它不是一個有效的洪流信息哈希,只有SHA1(40個字節)是有效的,一個BT客戶端或bencode腳本,如果你通過了,作爲一個洪流哈希會失敗。

看來其有關:

http://eztv.it/magnet:?xt=urn:btih:VPR33QQM3L6BFU5FGOZXMBNORAFFSZWW 這是值得注意。

+0

測試你的洪流哈希@ http://cherone.co.uk/torrent_parse; p –

+0

我也應該添加'zoink.it'到你的緩存搜索當做哈希到洪流文件:)我喜歡你的腳本:)!在u盤中使用此鏈接時,它確實開始下載它? – Griff