【问题标题】:URL-Encoding a Byte String?URL-编码一个字节字符串?
【发布时间】:2012-07-18 08:38:02
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: c++ windows urlencode sha1 bittorrent


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从左到右遍历字符串。如果遇到%,输出接下来的两个字符,将大写转换为小写。如果遇到其他情况,请使用小写字母以十六进制输出该字符的 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 编码的。)

      【讨论】:

      • 我认为问题是关于编码,而不是解码。
      • 没有区别。这个过程显然是可逆的。 (问题指出它只是 URL 编码的!)
      • 我还没有意识到 ascii 字符可以用来表示字节,谢谢你的澄清! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      相关资源
      最近更新 更多