Php 创建torrent文件的信息哈希时出现问题
我正在创建一个BitTorrent网站 如果用户上传了一个.torrent文件,我需要获取信息散列以从跟踪器获取更多信息 但是,我似乎无法从文件中获得正确的信息哈希 我已经从mininova下载了a.torrent() 根据mininova,信息散列应该是:6a7eb42ab3b9781eba2d9ff3545d9758f27ec239()。但是,当我尝试创建文件的信息散列时,我得到以下结果:3d05f149e604b1efaa0ed554a31e693755de7cb0 我不知道为什么我不能得到正确的信息哈希 如果我理解正确,我必须从torrent数据的info部分创建哈希 有关守则:Php 创建torrent文件的信息哈希时出现问题,php,bittorrent,info-hash,Php,Bittorrent,Info Hash,我正在创建一个BitTorrent网站 如果用户上传了一个.torrent文件,我需要获取信息散列以从跟踪器获取更多信息 但是,我似乎无法从文件中获得正确的信息哈希 我已经从mininova下载了a.torrent() 根据mininova,信息散列应该是:6a7eb42ab3b9781eba2d9ff3545d9758f27ec239()。但是,当我尝试创建文件的信息散列时,我得到以下结果:3d05f149e604b1efaa0ed554a31e693755de7cb0 我不知道为什么我不能得
$bencode = new BencodeModel();
$data = $bencode->decode_file($form->fields['filename']->saved_file);
$hash = $torrentmanager->create_hash($data['info']);
BencodeModel(太长,无法在此发布):
创建哈希函数:
function create_hash($info)
{
$bencode = new BencodeModel();
return urlencode(sha1($bencode->encode($info)));
}
我完全不知道哪里出了问题。非常感谢您的帮助
如果你需要更多信息,请告诉我,我会更新相关信息
编辑
根据要求,sha1的数据如下:
var_dump($bencode->encode($info));
编辑
这越来越奇怪了
我已经将该站点部署到live server(在Linux上运行)上,并且散列在那里工作
但是,在我的开发机器(Windows)上,它仍然无法工作
我已经尝试过替换换行符/回车符
有什么想法吗?torrent文件中的哈希不能是该文件的哈希。想想看。。。。散列是基于其内容的,您无法预先知道散列是什么。因此,计算文件的哈希值,然后将其嵌入文件会更改文件的哈希值,从而使刚刚嵌入的哈希值无效 .torrent文件中的哈希值基于文件的内容,而不是整个内容 从:
我能够让代码在WindowsXP和7上运行PHP5.3.x,并得到正确的哈希值。我猜您在Windows上加载的.torrent与在Linux上加载的不同(可能是编码问题) 尝试运行此代码,查看是否得到SHA1哈希值
148251317dae971fcd5a5dcc5d4bde3d85130c8f
的回显:
echo sha1(file_get_contents('your.torrent'));
我假设是:
echo sha1(file_get_contents($form->fields['filename']->saved_file));
如果你得到了不同的散列,那么你正在加载的文件是不正确的。还可以告诉我们你最后输入到
sha1
@hakre:的内容,因为torrent只能有一个信息散列,它用于刮取信息。当我手动尝试使用该散列获取信息时,我得到了我需要的信息:@hakre:。谢谢你到目前为止帮我的忙。$form->fields['filename']->saved_file
真的会返回文件内容吗?我不记得在PHP中上传时有这种语法。@DeadEnD:我使用自己的自定义框架$form->fields['filename']->saved_file
返回我用作$bencode->decode_file()
参数的文件名,该文件读取并解码文件内容torrent文件中没有散列。我正试图根据torrent文件中的信息计算哈希值。@PeeHaa:仔细阅读规范,了解创建哈希值所需的编码和格式。看看bencode类是否真的符合您的期望。我很肯定错误的根源就在这里。
echo sha1(file_get_contents($form->fields['filename']->saved_file));