Hash torrent info_散列参数

Hash torrent info_散列参数,hash,bittorrent,url-parameters,Hash,Bittorrent,Url Parameters,如何计算信息散列参数?Aka与信息字典对应的哈希 根据官方规范: 信息散列 metainfo文件中信息值的bencoded格式的20字节sha1哈希。请注意,这是metainfo文件的子字符串。 几乎可以肯定,必须对该值进行转义 这是否意味着只需从meta-info文件中获取子字符串并对reprezentative字节进行sha-1哈希 。。。。因为这是我尝试了12次但没有成功的方式,这意味着我已经将结果哈希与我应该得到的哈希进行了比较..它们不同..即+跟踪器响应是失败的,未知的torrent

如何计算信息散列参数?Aka与信息字典对应的哈希

根据官方规范:

信息散列 metainfo文件中信息值的bencoded格式的20字节sha1哈希。请注意,这是metainfo文件的子字符串。 几乎可以肯定,必须对该值进行转义

这是否意味着只需从meta-info文件中获取子字符串并对reprezentative字节进行sha-1哈希

。。。。因为这是我尝试了12次但没有成功的方式,这意味着我已经将结果哈希与我应该得到的哈希进行了比较..它们不同..即+跟踪器响应是失败的,未知的torrent…或其他什么


那么如何计算信息散列呢?

b对图元文件进行编码。然后就是sha1(bencode(元数据['info'])
(即再次对信息dict进行bencode,然后对其进行散列)。

图元文件已经进行bencoded,因此我不明白您为什么再次对其进行编码

我终于在Java代码中实现了这一点,以下是我的代码:

byte metaData[];  //the raw .torrent file

int infoIdx = ?;  //index of 'd' right after the "4:info" string

info_hash = SHAsum(Arrays.copyOfRange(metaData, infoIdx, metaData.length-1));
这假设“info”块是torrent文件中的最后一个块(错误?)

不要排序或诸如此类的事情,只需使用原始torrent文件的子字符串


对我有用。

这正是我所做的。。我使用这个库:bencode.codeplex.com..BDict有一个方法string Encode(),它为dict生成了相应的字符串。。我将其用于info dict+获取字节(使用booth编码UTF-8,ASCII尝试过)。。然后对这些字节进行散列..仍然没有得到正确的散列您认为排序dict会有帮助吗。。。在当前的实现中,编码不排序?根据torrent规范,如何按字符串排序..如果这正是你所做的,你的代码中的某个地方有一个bug,如果你想让任何人帮你找到它,你必须发布代码。BEP-3要求对密钥进行排序,并且非常清楚编码始终是UTF-8,排序是通过比较编码的字节,没有任何排序。如果上面的方法不起作用,并且提供了错误的散列,那么您的lib就有bug,需要进行一些单元测试。已更新,现在显示:“info_哈希-metainfo文件中info值的bencoded表单的20字节sha1哈希。请注意,这是metainfo文件的子字符串。info哈希必须是在.torrent文件中找到的编码表单的哈希,无论它是否无效。”在多个站点上发现这是一个解决方案。。这假设.torrent是根据规则构建的(所有的dict都已排序),这应该始终是正确的,除非是由我愚蠢的应用程序生成的..但无论如何,我最终使用了另一个bencoding库&现在所有的功能都很好(阅读和创建)。。谢谢你的邀请answer@pulancheck1988但是您必须在info结构中对dict键进行排序,否则infohash计算将不正确。因此,如果您必须对信息结构中的键进行排序,您还可以对它们进行处处排序。@b0fh实际上,在计算信息哈希时,对未排序的信息dict进行排序是错误的。这里有一个例子,其中“info”块不是最后一个:它下面有一个“url list”键。