计算(sha1)“;碎片”;创建torrent文件时


Calculate (sha1) "pieces" when creating torrent file

我几乎完全完成了torrent服务器。我现在所要做的就是找出.trent文件是如何填充信息键的"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"键的值?

每次我试图在Transmission中打开它,它都会被读取为已损坏。

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

谢谢,

是。从文件中读取piece size字节数,通过SHA-1独立运行每个片段。得到的20字节SHA-1摘要就是您的片段,它被放入片段字符串中的二进制

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

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

看起来你只使用单个文件的种子。多文件torrent的情况更为复杂。本质上,你必须想象torrent中的所有文件都被连接起来,以形成从一个片段到一个文件和偏移的映射。