我正在创建一个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)));
}
我完全不知道我做错了什么。非常感谢任何帮助!
如果您需要更多信息,请告诉我,我会提供相关信息。
编辑
根据要求,以下是sha1的数据:
var_dump($bencode->encode($info));
编辑
情况变得更加奇怪了。
我已经将网站部署到运行在Linux上的生产服务器上,哈希处理在那里可以正常工作。
然而,在我的开发机器(Windows)上仍然无法正常工作。
我已经尝试替换换行符/回车符。
有任何想法吗?
sha1
中会有所帮助。 - Jon$form->fields['filename']->saved_file
真的会返回文件内容吗?我不记得在 PHP 中上传时有这种语法。 - fent$form->fields['filename']->saved_file
返回文件名,我将其用作$bencode->decode_file()
的参数,该函数读取并解码文件内容。 - PeeHaa