2011-06-29 13 views
3

私はBitTorrentサイトを作成しています。トレントファイルの情報ハッシュを作成する際の問題

ユーザーが.torrentファイルをアップロードする場合、トラッカーから詳細情報を取得するために情報ハッシュを取得する必要があります。

しかし、ファイルから正しい情報ハッシュを取得できないようです。

私はmininovaから.torrent(http://www.mininova.org/get/2886852)をダウンロードしました。

mininovaによると、情報ハッシュは:6a7eb42ab3b9781eba2d9ff3545d9758f27ec239(http://www.mininova.org/det/2886852)である必要があります。しかし、ファイルの情報ハッシュを作成しようとすると、次のようになります。3d05f149e604b1efaa0ed554a31e693755de7cb0

私は正しい情報ハッシュを得ることができないという手掛かりはありません。

私が正しく理解していれば、トレントデータの情報セクションからハッシュを作成する必要があります。

関連するコード:

$bencode = new BencodeModel(); 
$data = $bencode->decode_file($form->fields['filename']->saved_file); 
$hash = $torrentmanager->create_hash($data['info']); 

BencodeModel(ここに投稿するには長すぎる):http://pastebin.com/Zc5i94DQ

ハッシュ関数を作成します。

function create_hash($info) 
{ 
    $bencode = new BencodeModel(); 
    return urlencode(sha1($bencode->encode($info))); 
} 

私はどこ暗闇の中で完全によ私は間違っている。どんな助けでも大歓迎です!

詳細情報が必要な場合は、私に連絡して関連情報を更新します。

EDIT

としては、SHA1のデータを要求した:

var_dump($bencode->encode($info)); 

http://pastebin.com/HiQgRX6M

EDIT

これは、より多くの奇妙ななっています。

私はライブサーバー(Linux上で動作します)にサイトを展開し、そのサーバーでハッシングが機能しています。

ただし、私の開発マシン(Windows)ではまだ動作しません。

私はすでに改行/改行を置き換えようとしました。

アイデア?

+0

また、あなたがsha1' 'に供給終わるをお聞かせすると便利でしょう。 – Jon

+0

@ジョン:質問 – PeeHaa

+0

@hakreに更新:急流のみ1情報のハッシュを持つことができ、それは情報のためのscrape' 'に使用されているので。そして、私は手動で私は私が必要とする情報を取得そのハッシュを使用して情報を取得しようとすると:http://tracker.mininova.org/scrape?info_hash=6a7eb42ab3b9781eba2d9ff3545d9758f27ec239 – PeeHaa

答えて

0

トレントファイルのハッシュをファイルのハッシュにすることはできません。それについて考えてみましょう。ハッシュはその内容に基づいており、ハッシュが何であるかを事前に知ることはできません。したがって、ファイルのハッシュを計算し、ファイルに埋め込むと、ファイルのハッシュが変更され、埋め込まれたばかりのハッシュが無効になります。

.torrentファイルのハッシュは、ファイルの内容に基づいていますが、内容全体には基づいていません。BT specから

info_hash 
    The 20 byte sha1 hash of the bencoded form of the info value from the metainfo file. Note that this is a substring of the metainfo file. This value will almost certainly have to be escaped. 
+0

トレントファイルにハッシュはありません。私はトレントファイル内の情報からハッシュを計算しようとしています。 – PeeHaa

+0

@PeeHaa:慎重にあなたがのハッシュを作成するために必要なものとにエンコーディングに関する仕様をお読みください。あなたが期待していることが本当にあれば、bencodeクラスを見てみましょう。私は間違いがそこに根付いていると確信しています。 – hakre

1

私は、PHP 5.3.xでのWindows XPと7の両方で動作し、正しいハッシュを取得するためのコードを取得することができました。私はあなたがWindowsにロードしている.torrentが、あなたがLinuxにロードしたものと異なることを推測しています。

このコードを実行してみてください、あなたはSHA1ハッシュ148251317dae971fcd5a5dcc5d4bde3d85130c8fを取得するかどうかを見るには、エコー:その後、

echo sha1(file_get_contents($form->fields['filename']->saved_file)); 

あなたが異なるハッシュを取得する場合:私は次のようになり仮定します

echo sha1(file_get_contents('your.torrent')); 

を読み込んでいるファイルが正しくありません。

関連する問題