2012-02-29 58 views
1

我幾乎完全用我的torrent服務器完成。我現在所要做的就是了解.torrent文件如何填充信息鍵的「件」鍵。創建torrent文件時計算(sha1)「件」

我目前有這個信息在我的torrent文件中,編碼爲u​​tf-8格式。最後看到的散列是文件TITLE的哈希,甚至不接近我在冒號前指定的位長。對於個位長,採用(文件大小/片長)* 20計算,並採用圓()四捨五入:

d8:announce64:http://www.valevarkasystems.com:40/torrents/tracker/announce.php 

8:encoding5:UTF-84:infod6:lengthi71711042e4:name25:Executive Meeting480p.flv 

12:piece lengthi128000e6:pieces11205:òOìcØq¬rkÑzÎõyjZee 

如何正確計算值末尾的「碎片」鍵?

每次我嘗試在傳輸中打開它時,它都被讀爲已損壞。

我是否使用fopen(),抓取一段「片段長度」的文件,併爲每個片段創建一個sha1散列,直到到達文件末尾?

謝謝,

+0

http://wiki.theory.org/BitTorrentSpecification#Info_Dictionary – 2012-02-29 21:16:02

+0

@Marc Brown你有沒有看過BEncode/BDecode的PHP源代碼,如果你喜歡,我可以發佈這兩個類 – 2012-02-29 21:27:38

+0

@MarcB我發現/是多次提到這個頁面,我忘記了我有三個標籤打開它。我明白他們希望我散列每個文件,即file_get_contents(),其中maxlen是我的piece_length的大小?我認爲這就是我必須要做的,但我不確定。 – 2012-02-29 21:57:58

回答

2

是的。您從文件讀取piece size字節數,通過SHA-1獨立運行每個片段。生成的20字節SHA-1摘要就是你的作品,它被放置在作品串中作爲二進制

如果您使用fopen()來讀取數據,請確保以二進制模式打開文件(即指定「b」作爲模式)。否則,只要在字節流中遇到\ n,運行時可能會插入\ r。

您應該以(filesize + piece_length - 1)/piece_length結尾,其數量乘以20即爲您的pieces字符串的長度。

它看起來像你只使用單個文件種子。多文件洪流案件更加複雜。你基本上必須想象洪流中的所有文件被連接起來以形成從一個片段到一個文件和偏移量的映射。

+0

感謝您的提示。我剛剛閱讀了關於使用二進制標誌的可移植性。但是,我仍然使用「file_get_contents」...... – 2012-03-16 14:04:18