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

时间:2012-02-29 21:10:53

标签: php hash bittorrent

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

如何在最后正确计算“件”键的值?

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

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

谢谢,

1 个答案:

答案 0 :(得分:2)

是。您从文件中读取piece size个字节数,通过SHA-1独立运行每个部分。生成的20字节SHA-1摘要是您的作品,在片段字符串中将其作为二进制

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

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

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