这种机制能够确保每个文件块的完整性,抵御设备故障或恶意投毒(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>类型