了解 BitTorrent 片段输出
Posted
技术标签:
【中文标题】了解 BitTorrent 片段输出【英文标题】:Understanding BitTorrent Pieces Output 【发布时间】:2017-02-14 19:39:22 【问题描述】:使用https://github.com/utdemir/bencoder 从单个文件洪流中提取元信息后,我在输出的“片段”部分下看到以下文本-
This is an abbreviated portion of the output-
'pieces':'\x8f1g\xdb\x1e\x17\n(\xf9\xbb\xb0&\xa0\xadT9N\xa8L\x89\x97\xf79\x15\x07N
在查看https://wiki.theory.org/BitTorrentSpecification之后,我了解到这个输出是-
[a] 字符串,由所有 20 字节 SHA1 哈希值的串联组成,每段一个(字节字符串,即未进行 urlencoded)
但是我看到恒定的反斜杠“\”并且想知道这是否类似于十六进制代码,因为 SHA-1 通常输出为十六进制?
【问题讨论】:
是的,当 ascii 不可用时,字节表示为十六进制 是的,这些是十六进制表示的字节。尝试将 '\x68\x65\x6c\x6c\x6f' 放入 Python shell(如果您使用的是 Python3,则尝试将 b'\x68\x65\x6c\x6c\x6f' )。 @kirbuchi 如果字母“g”包含在这些表示中,则不会超出十六进制范围,因为十六进制在字母表示中以“f”结尾 @CJCahala 您可以在 Python 字节串(例如b'\x68ello'
)中混合 ascii 字母和十六进制表示,\ 转义接下来的两个字符并将它们视为下一个字节的十六进制表示。
“SHA-1 通常输出为十六进制” 一个十六进制 sha1 输出有多少个字符?规范说每个哈希有多少字节?
【参考方案1】:
您从程序中看到的输出被编码为Python bytesliteral, 是不可打印的字节,ASCII 被转义。
\x8f1g\xdb\x1e\x17\n(\xf9\xbb\xb0&\xa0\xadT9N\xa8L\x89\x97\xf79\x15\x07N
\x8f
=> 十六进制 0x8F1g
=> ASCII "1g"\xdb\x1e\x17
=> 十六进制 0xDB1E17\n
=> 转义序列表示 ASCII 换行 (LF)(十六进制0x0A)(
=> ASCII "("\xf9\xbb\xb0
=> 十六进制 0xF9BBB0
等等
【讨论】:
以上是关于了解 BitTorrent 片段输出的主要内容,如果未能解决你的问题,请参考以下文章