info_hash计算的torrent不正确

时间:2013-12-13 15:19:15

标签: java urlencode bittorrent sha

好的,我已经搜索了所有相关的问题,并找到了可用的源代码,只是卡住了。 我正在使用相关问题中的代码: How to calculate the hash value of a torrent using Java

构建SHA-1哈希。

然后我这样做是为了编码它,包含在跟踪器请求中:

  

URLCodec c = new org.apache.commons.codec.net.URLCodec();   返回new String(c.encode(info_hash));

但是跟踪器没有同行回复。通过跟踪uTorrent,我可以看到我的torrent文件的正确哈希是: T%7F%BC%A6%92%BB%8A%8B%2AL%B9%A3%0F%A59%F3%98%E6%0C%EB

但我的代码输出: %E4%AF%3C%96%9E%D2%奥吉通%C0%C3%B4%12%93%D4H%3B%9A%2CF

为什么这不起作用的任何想法?

1 个答案:

答案 0 :(得分:1)

private string encodeInfoHash(string code) 
{
      //string code = "78820B24672757A60BEF15252E93F3D0C4DEB5C3";
      byte[] codeB = Encoding.Default.GetBytes(code);
      string info_hash_encoded = null;
      for (int i = 0; i < code.Length; i += 2)
      {
            string tmpCode = code[i].ToString() + code[i + 1].ToString();
            int j = Convert.ToInt32(tmpCode, 16);
            char s1 = (char)j;
            bool isSpecChar = false;
            if (s1.ToString() == "." || s1.ToString() == "-" || s1.ToString() == "~")
                  isSpecChar = true;
            if ((Char.IsLetter(s1) || Char.IsNumber(s1) || isSpecChar) && !Char.IsControl(s1) && j <= 127)
            {
                  info_hash_encoded += s1.ToString();
            }
            else
            {
                  info_hash_encoded += "%" + tmpCode.ToLower();
            }
      }
      return info_hash_encoded;
}

我使用C#,您可以阅读我的博客了解更多细节 http://hello.xiaoyezi.xyz/urlencode-the-info_hash.html