2012-04-17 59 views
4

如何計算的info_hash參數?又名哈希對應的信息詞典?洪流info_hash參數

來自官方的規格:

info_hash 來自元信息文件中的info值中B編碼格式的20字節的SHA1哈希。請注意,這是元信息文件的子字符串。 這個值幾乎肯定會被轉義。

這是否意味着只需從元信息文件中獲取子字符串並對代表字節執行sha-1散列?

....因爲這是我如何嘗試12次,但沒有成功的意義我已經比較了所得到的散列與我應該結束與..他們不同..that +跟蹤器響應是失敗,未知的洪流......什麼

那麼如何計算info_hash?

回答

3

bdecode元文件,那麼它的簡單的 「SHA1(bencode(元數據[ '信息']))」(即bencode只有信息DICT再次,然後散列這一點)。

+1

這正是我做什麼..我使用這個庫:bencode.codeplex.com ..the BDict有一個方法字符串編碼(),它產生的coresponding字符串的字典..我使用您的信息字典+獲取字節(嘗試與編碼UTF-8,ASCII的攤位)..並對這些字節進行哈希..仍然沒有得到正確的散列 – pulancheck1988 2012-04-18 08:47:03

+0

你是否排序字典將幫助...在當前實現編碼不排序?以及如何根據字符串對字符串進行排序。 – pulancheck1988 2012-04-18 08:48:36

+0

如果確實如此,那麼代碼中存在一個錯誤,如果您想讓任何人爲您找到它,則必須發佈代碼。 – Arvid 2012-04-18 16:59:20

4

圖元文件已經被B編碼,所以我不明白爲什麼你再編碼呢?

我終於得到了在Java代碼中這方面的工作,這是我的代碼:(?錯)

byte metaData[]; //the raw .torrent file 

int infoIdx = ?; //index of 'd' right after the "4:info" string 

info_hash = SHAsum(Arrays.copyOfRange(metaData, infoIdx, metaData.length-1)); 

這是假定「信息」塊是在torrent文件的最後一塊

別排序或類似的東西,只需使用原始torrent文件的子字符串。

適合我。

+0

發現這是一個解決方案在多個網站..這假定。洪流是由規則(所有的詞典排序)建立的,除非是由我愚蠢的應用程序所做的,否則這應該主要是真實的。但無論如何,我最終使用了另一個本碼庫,現在一切正常(閱讀和創建)。 。謝謝你的答案 – pulancheck1988 2012-05-25 15:13:02

+0

@ pulancheck1988,但你必須對信息結構中的字典鍵進行排序,否則infohash計算將不正確。因此,如果您必須對信息結構中的鍵進行排序,則不妨將它們排序。 – b0fh 2013-02-25 11:15:21

+0

@ b0fh當您計算info_hash時,排序未排序的信息字典實際上是錯誤的。 [在這裏看到我的評論。](http://stackoverflow.com/questions/10191480/the-torrent-info-hash-parameter/10203508#comment48969520_10203508) – Encombe 2015-05-25 18:21:18

-1

訪問https://gist.github.com/shxsun/9085646,這是一個Python代碼,說明如何info_generate,好運氣。

+1

這應該發表評論。 – NaaN 2014-02-19 04:06:50

+1

請將相關部分的代碼添加到您的答案中,而不是僅僅鏈接到外部網站。 – kaskelotti 2014-02-19 04:09:54

+1

鏈接不再有效 – phansen 2014-11-13 02:18:53