zoukankan      html  css  js  c++  java
  • BEncode编码方式以及torrent文件的一些内容

    字符串:

    字符串被如此编码:<字符串长度>:字符串正文.这种表示法没有任何的分界符.
    例子:如"8:announce"指"announce".

    整数:
    整数被如此编码:<i>整数值<e>.可以为负数,如'i-3e'
    例子:'i3e' 指 3.

    列表:
    列表是如此被表示的:<l>Bencode Value<e>,
    列表可以用来表示多个对象.
    列表内容可以包括字符串,整数,字典,甚至列表本身.
    例子:'l4:spam4:eggse' 指 [ "spam", eggs" ]

    字典:
    字典是一个一对一的映射.它表示了一个主键(必须为字符串)和一个数据项(可以为任何Bencode值)的关系.字典可以用来表示一个对象的多种属性.
    字典是如此被编码:<d><bencoded string><bencoded element><e>
    注意:字典必须根据主键预排序.

    Metainfo

    BitTorrent下载时,用户必须下载一个.torrent文件.它就是所谓"Metainfo file",里面存储有关于下载内容的announce地址,长度,大小,SHA1杂凑项等内容.它由Bencode编码组成.而且字符串是用UTF-8编码的.
    不过在中国,常常使用GBK编码。它由如下几项组成:

    • :描述下载内容的信息,是一个字典.有两种可能,一种是"单文件"模式:当BitTorrent只下载一个文件的时候使用.另一种是"多文件"模式,是在下载多个内容的时候使用.两种情况下Info各有不同.Info
              单文件模式:
    • :整数,指文件的大小.length
    • :(可选),字符串,含有32字节md5校验码.BitTorrent没有使用MD5而是使用了SHA1作为自已的签名算法.这是为其他P2P软件兼容而设置的可选内容.md5sum
    • :字符串,这是下载文件的名字,纯粹是建议.name
    • :整数,是BitTorrent文件块的大小.piece length
    • :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.pieces
              多文件模式:
    • files: 一个由字典组成的列表,每个字典表示一个文件,字典的键值有如下内容:
      • length:整数,指当前文件的大小.
      • md5sum:(可选),字符串,同单文件模式,指当前文件.
      • path:由字符串组成的列表,每个列表元素指一个路径名中的一个目录或文件名.比如说:"l3:abc3:abc:6abc.txte",指文件路径"abc/abc/abc.txt".
    • :字符串,BitTorrent下载路径中最上层的目录名name
    • :整数,是BitTorrent文件块的大小.piece length
    • :字符串,连续的存放着所有块的SHA1杂凑值,每一个文件块的杂凑值为20字节.pieces
    • :字符串,指向tracker的URL.announce
    • :(可选),字典,这是一个对官方协议的扩展,支持"多Tracker".announce-list
    • :(可选),整数,创建日期(UNIX创世纪格式:1970-1-1日00:00UTC到当时的秒数)creation date
    • :(可选),字符串,注释comment
    • :可选,字符串,创建此.torrent文件的BT下载端程序名和版本号created by
    • :BitComet对Metafile的扩展,一般用来指出不使用utf-8而使用gbk.encoding


    举一个例子,星球大战:
    d8:announce34:http://tracker.ydy.com:86/announce10:createdby13:BitComet/0.5813:creationdatei1117953113e8:encoding3:GBK4:infod6:lengthi474499162e4:name51:05.262005.StarWars Episode IV A New Hope-Rv9.rmvb10:name.utf-851:05.26.2005.Star WasEpisode IV A New Hope-Rv9.rmvb12:piecelengthi262144e6:pieces36220:XXXXXXXXXXXXXXX(SHA1杂凑 值)
    表示了如下信息:
    Tracker地址 : http://tracker.ydy.com:86/announce
    被BitComet/0.58创建
    创建时间:1970-1-1 00:00秒后1117953113秒.即Sun Jun 5 14:31:53 2005.
    encoding是BitComet的扩展,实际上用了UTF-8就不需要GBK.

    • info: (这是单文件模式的代表)
    • 大小:474499162(452Mb)
    • 文件名:05.262005.Star Wars Episode IV A New Hope-Rv9.rmvb
    • name.utf-8:也是BitComet的扩展,指出文件名编码不是GBK而是UTF-8.
    • 文件块大小:262144字节(256KB)
    • pieces:长度为366220的SHA1杂凑值内容,由于每一个文件块20字节SHA1杂凑值,可见文件块有36620 / 20 = 1831个

  • 相关阅读:
    看雪-课程-加密与解密基础
    Windows API-Wininet&WinHTTP
    OS-Windows-bat-不等待当前命令返回继续执行后续指令
    Code-OPC DA- OPC Client Code Demo
    OS-Windows-Close Windows Error Reporting
    C-长度修饰符
    Code-Linux-time_t
    Windows-bat-Path
    Code-C++-CTime&ColeDateTime
    c++命名规范、代码规范和参数设置
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2112793.html
Copyright © 2011-2022 走看看