2013-12-13 4 views
0

OK Я искал все связанные вопросы и исходный код, где доступно, просто застрял. Я использую этот код из связанного вопроса: How to calculate the hash value of a torrent using Javainfo_hash, рассчитанный для торрента неверно

для создания SHA-1 хэша.

Тогда я делаю это, чтобы кодировать его, которые должны быть включены в запрос на трекере:

URLCodec с = новый org.apache.commons.codec.net.URLCodec(); return new String (c.encode (info_hash));

Но трекер отвечает без сверстников. Прослеживая uTorrent, я вижу, что правильный хэш для моего файла торрента: T% 7f% bc% a6% 92% bb% 8a% 8b% 2aL% b9% a3% 0f% a59% f3% 98% e6% 0c % ЕВ

Но мой код выхода: % E4% AF% 3C% 96% 9E% D2% Bajt% C0% C3% B4% 12% 93% D4h% 3B% 9A% 2CF

Любые идеи почему это не сработает?

+0

В основном вам нужно UrlEncode * двоичную * форма infohash. Это часто задаваемый вопрос, на самом деле у SO уже есть ответ на этот вопрос: http://stackoverflow.com/questions/4072234/bittorrent-tracker-request-format-of-info-hash –

ответ

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

+0

Новый обзор ответов пользователей: спасибо за то, что нашли время давать ответы. Если вам нравится tipp, я бы рекомендовал начать ответ с текстом, а затем показать код. Вы не сделали ничего плохого, он просто выглядит как «только код», на который нахмурился. То же самое верно для ссылок, не суммируя контент. – eckes