3

BitTorrent サイトを作成しています。

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

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

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

mininova によると、情報のハッシュは次のようになります。ただし、ファイルの情報ハッシュを作成しようとすると、次のようになります。

正しい情報ハッシュを取得できない理由についての手がかりがありません。

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

関連するコード:

$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)));
}

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

さらに情報が必要な場合は、お知らせください。関連情報を更新します。

編集

要求された sha1 のデータ:

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

http://pastebin.com/HiQgRX6M

編集

これはますます奇妙になっています。

サイトをライブ サーバー (Linux で実行) にデプロイしましたが、ハッシュはそこで機能します。

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

私はすでに改行/改行を置き換えてみました。

何か案は?

4

2 に答える 2

1

PHP 5.3.x を使用して Windows XP と 7 の両方でコードを実行し、正しいハッシュを取得することができました。Windows にロードしている .torrent は、Linux にロードしたものとは異なると思います (おそらくエンコードの問題)。

このコードを実行してみて、SHA1 ハッシュが148251317dae971fcd5a5dcc5d4bde3d85130c8fエコーされるかどうかを確認してください。

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

これは次のようになります。

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

異なるハッシュを取得した場合、ロードしているファイルは正しくありません。

于 2011-09-27T02:45:37.467 に答える
0

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

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

BT仕様から:

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.
于 2011-06-29T21:50:12.193 に答える