【问题标题】:Calculate (sha1) "pieces" when creating torrent file创建种子文件时计算(sha1)“件”
【发布时间】:2012-02-29 21:10:52
【问题描述】:

我的 torrent 服务器几乎用完了。我现在要做的就是找出 .torrent 文件如何填充 info 键的“pieces”键。

我目前在我的 torrent 文件中有此信息,以 utf-8 格式编码。您在最后看到的哈希是文件 TITLE 的一个 has,甚至不接近我在冒号前指定的位长度。片段的位长度使用(文件大小/片段长度)* 20 计算,并使用 round() 进行四舍五入:

d8:announce64:http://www.valevarkasystems.com:40/torrents/tracker/announce.php  

8:encoding5:UTF-84:infod6:lengthi71711042e4:name25:Executive Meeting480p.flv

12:piece lengthi128000e6:pieces11205:òOìcØq¬rkÑzÎõyjZee

如何正确计算末尾“pieces”键的值?

每次我尝试在传输中打开它时,它都会被读取为已损坏。

我是否使用 fopen(),抓取一个“片段长度”的文件,并为每个片段创建一个 sha1 哈希,直到我到达文件末尾?

谢谢,

【问题讨论】:

  • @Marc Brown 你看过 BEncode/BDecode php 源码吗,也许这会有所帮助,如果你愿意,我可以发布这两个类
  • @MarcB 我发现/被提及该页面很多次,以至于我忘记了我打开了三个标签。我知道他们希望我对每个文件片段进行哈希处理,即 file_get_contents() 其中 maxlen 是我的片段长度的大小?我想这就是我所要做的,但我不确定。
  • @LawrenceCherone 我已经看过源代码,我相信我必须做一个 while 循环,在其中我“sha1”文件的每个部分,即“片段长度”的长度。
  • 我实际上正在取得进展。在我可以将我的文件准备为纯文本之前。现在,在我使用 file_get_contents 创建了一个“sha1”文件部分的 while 循环后,我无法再使用常规文本编辑器打开 torrent 文件(实际上是一件好事),但我仍然有一个损坏的文件。 。 有小费吗?我错过了什么吗?我需要信息哈希吗?

标签: php hash bittorrent


【解决方案1】:

是的。您从文件中读取 piece size 字节数,通过 SHA-1 独立运行每个片段。生成的 20 字节 SHA-1 摘要是您的片段,它作为 binary 放入片段字符串中。

如果您使用fopen() 读取数据,请确保以二进制模式打开文件(即指定“b”作为模式)。否则,您的运行时可能会在字节流中遇到 \n 时插入 \r。

你应该得到(filesize + piece_length - 1) / piece_length的片段数,乘以20就是你的pieces字符串的长度。

您似乎只使用单个文件种子。多文件洪流案例更复杂。您基本上必须想象 torrent 中的所有文件被连接起来以形成从一个片段到一个文件和偏移量的映射。

【讨论】:

  • 感谢您的提示。我刚刚阅读了有关使用二进制标志的可移植性。但是,我还是使用“file_get_contents”...
猜你喜欢
  • 2017-12-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多