从零开始编写一个BitTorrent下载器 (5)

这种机制能够确保每个文件块的完整性,抵御设备故障或恶意投毒(torrent poisoning)造成的损害。如果攻击者不能破解SHA-1进行原像攻击(preimage attack),那么下载取得的文件就是安全可靠的。

Bencode编码

从已知的信息可以看出,.torrent文件中的元数据均以“键:值”形式存储,故可以将整个内容理解为一个经过特殊编码的字典,或者一个近似的JSON。

Bencode中,数字采用十进制编码,相比纯二进制编码显得效率较低,但保证了良好的跨平台性(无大小端存储问题)。

Bencode支持四种类型的数据:string、int、Dictionary<string, object>、List<object>。

string类型

string类型的编码格式为[length]:[string],以字符串长度开头,以字符串内容结束。示例:

"abc" => 3:abc

int类型

int类型的编码格式为i[int]e,以i开头,以e结尾。示例:

123 => i123e

Dictionary<string, object>类型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfffd.html