2013-04-16 2 views
1

Из-за неадекватности системы ответа μTorrent при отправке через магнитные ссылки или файлы торрентов, то есть полное отсутствие сообщения для дублирования добавления торрента, я пытаюсь получить хэш из торрент-файла до его отправки и сравнить его со списком текущих заданий. Код, который у меня есть, возвращает неправильный хеш, и я не знаю, почему. Вот код, который я использую.Проблема с SHA1 Хеш торрент-файла в Objective-C

Я пытаюсь отправить файл с хешем «dc9202f98aea7420a2872655c8f7184401e2a9c8», этот код возвращает один из тридцати хэшей каждый раз, когда он запускается.

+ (NSString *) torrentHashFromFile:(NSData *)file 
{ 
    NSString * retVal = @""; 

    NSData * data = [BEncoding encodedDataFromObject: 
        [[BEncoding objectFromEncodedData:file] 
         objectForKey:@"info"]]; 

    unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH]; 

    if (CC_SHA1([data bytes], (unsigned)[data length], hashBytes)) 
    { 
     NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; 

     for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) 
     { 
      [output appendFormat:@"%02x", hashBytes[i]]; 
     } 

     retVal = output; 
    } 

    return retVal; 
} 

ответ

1

Что делает Вы думаете, что BT информация хэш SHA1 является более всего в штучных хэшей?

Цитирование BEP-0003:

info_hash 
    The 20 byte sha1 hash of the bencoded form of the info value from the metainfo file. 
    Note that this is a substring of the metainfo file. 
+0

наивности, в основном. Я редактировал свой код для функции, которую я написал той ночью, когда я сам это прочитал, что странно, что он больше не возвращает неправильный хэш, он возвращает один из многих неправильных хэшей. Я думаю, что библиотека виновата. –

+1

Это очень вероятно 24 точно, не тридцать или около того. Bencode требует сортировки ключей dict. – pyroscope

+0

В библиотеке используется отсортированный тип словаря, но когда я печатаю его на экране, у него вместо некоторых чисел есть случайные символы. –