在PHP中转换torrent的通告请求中的信息\u散列

在PHP中转换torrent的通告请求中的信息\u散列,php,tracker,utorrent,info-hash,Php,Tracker,Utorrent,Info Hash,我很难理解如何将info_散列值“转换”为真正的散列。 下面是一个例子,说明了当uTorrent向我的跟踪器发布消息时,我从中得到了什么: { passkey: "77ec6a27adcc441648d66d0b873550e4", info_hash: "YNvÿ@p", peer_id: "-UT3430-89 ", port: "54790", uploaded: "0", download

我很难理解如何将info_散列值“转换”为真正的散列。 下面是一个例子,说明了当uTorrent向我的跟踪器发布消息时,我从中得到了什么:

{
passkey: "77ec6a27adcc441648d66d0b873550e4",
info_hash: "YNvÿ@p",
peer_id: "-UT3430-89 ",
port: "54790",
uploaded: "0",
downloaded: "491520",
left: "24928863",
corrupt: "0",
key: "A2DD5E96",
numwant: "200",
compact: "1",
no_peer_id: "1"
}
我试图理解的是,我如何接受这个奇怪的值:“YNvÿ@p”并将信息散列作为sha1(比如:594E98760099B1CFC3BFAA4070C0CC02F6C1AA90)? 我在我的服务器上使用PHP

现在我已经阅读了以下声明:

信息散列

metainfo文件中信息值的bencoded格式的20字节sha1哈希。请注意,这是metainfo文件的子字符串。info散列必须是.torrent文件中找到的编码表单的散列,无论它是否无效。几乎可以肯定,必须对该值进行转义

但了解发生了什么对我没有多大帮助

# php -r 'echo(hex2bin("594E98760099B1CFC3BFAA4070C0CC02F6C1AA90"));' | hexdump -C
00000000  59 4e 98 76 00 99 b1 cf  c3 bf aa 40 70 c0 cc 02  |YN.v.......@p...|
00000010  f6 c1 aa 90                                       |....|

注意到一个模式了吗?

好的,我找到了解决方案。 出于某种原因,$\u GET in PHP(我们使用CodeIgniter)无法获取完整的二进制数据,它看起来好像出于某种原因正在剥离它。剩下的只是“YNvÿ@p”,但事实上,几乎没有更多的未知二进制符号被抛出

所以。。。我所做的是获取完整的URL参数:

$parts = parse_url($_SERVER['REQUEST_URI']);
然后,我在'info_hash'键中得到了这个值:

D%3b%16%01%b2%af%d7%cbT%e1%a1%d0A%20%20%f7%ce%c2%d3%bf
后来我就做了这个动作,

$info_hash = bin2hex(urldecode($parts["info_hash"]));
得到了一个完整的哈希


@Sammitch,谢谢你在这件事上给我指出了正确的方向

好的,很好,你是对的。那是你做hex2bin的时候。。。。如果我理解正确,为了返回十六进制模式,我需要使用‘bin2hex’函数,对吗?因为我现在试过了,它给我的回报是:594e76c3bf4070。我可以看到完整的散列中几乎没有相似之处:“594E98760099B1CFC3BFAA4070C0CC02F6C1AA90”,但我需要找到一种方法来获得上面的完整散列。哦,顺便说一句,对不起,我发布的JSON数组不正确。“infoÿhash”的值是:“YNvÿ@p”,而不是上面给出的完整哈希。我编辑了问题中的JSON输出。@NeoTrix不,它不是“YNvÿ@p”,它充满了无法打印的字符。不要复制和粘贴损坏的输出,在PHP中操作未受干扰的数据。