0

我正在写一个 Bittorrent 客户端。其中一个步骤要求程序向跟踪器发送一个 HTTP GET 请求,其中包含部分 torrent 文件的 SHA1 哈希。我使用 Fiddler2 拦截 Azureus 发送给跟踪器的请求。

Azureus 发送的哈希是 URL 编码的,如下所示:%D9%0C%3C%E3%94%18%F0%C5%D9%83X%E03I%26%2B%60%8C%BFR

哈希在 URL 编码之前应如下所示:d90c3ce39418f0c5d98358e03349262b608cbf52

我注意到它并不像每两个字符放置一个'%'符号那么简单,所以我将如何对这个 BYTE 字符串进行编码以获得与 Azureus 相同的值。

提前致谢。

4

2 回答 2

2

实际上,您可以每两个字符放置一个 % 符号。Azureus 不这样做,因为例如,R它是 URL 中的安全字符,并且52是 的十六进制表示R,因此它不需要对其进行百分比编码。使用 %52代替是等效的。

于 2012-07-18T08:44:08.537 回答
1

从左到右遍历字符串。如果遇到 a %,输出接下来的两个字符,将大写转换为小写。如果遇到其他问题,请使用小写字母以十六进制输出该字符的 ASCII 代码。

%D9 %0C %3C %E3 %94 %18 %F0 %C5 %D9 %83 X %E0 3 I %26 %2B %60 %8C %BF R

X 的 ASCII 码是 0x58,所以变成58. 3 的 ASCII 码是 0x33。

(我有点困惑你为什么要问。你的问题清楚地表明你认为这是 URL 编码的。)

于 2012-07-18T08:44:16.930 回答