我的 torrent 服务器即将完全完成。我现在要做的就是找出 .torrent 文件如何填充 info 键的“pieces”键。
目前,我的 torrent 文件中有此信息,以 utf-8 格式编码。您在末尾看到的哈希值是文件标题的哈希值,甚至不接近我在冒号之前指定的位长度。片段的位长度使用(文件大小/片段长度)* 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”键的值?
每次我尝试在 Transmission 中打开它时,它都会被读取为已损坏。
我是否使用 fopen(),抓取“片段长度”的文件片段,并为每个片段创建 sha1 哈希,直到到达文件末尾?
谢谢
最佳答案
是的。您从文件中读取片段大小
字节数,通过 SHA-1 独立运行每个片段。生成的 20 字节 SHA-1 摘要就是您的片段,它以二进制形式放入片段字符串中。
如果您使用 fopen()
读取数据,请确保以二进制模式打开文件(即指定“b”作为模式)。否则,您的运行时可能会在字节流中遇到\n 时插入\r。
您最终应该得到 (filesize +piece_length - 1)/piece_length
block 数,乘以 20 就是 pieces
字符串的长度。
看来您只使用单个文件 torrent。多文件 torrent 的情况更为复杂。您本质上必须想象 torrent 中的所有文件被连接起来以形成从片段到文件和偏移量的映射。
关于php - 创建 torrent 文件时计算 (sha1) "pieces",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506667/