Из-за неадекватности системы ответа μ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;
}
наивности, в основном. Я редактировал свой код для функции, которую я написал той ночью, когда я сам это прочитал, что странно, что он больше не возвращает неправильный хэш, он возвращает один из многих неправильных хэшей. Я думаю, что библиотека виновата. –
Это очень вероятно 24 точно, не тридцать или около того. Bencode требует сортировки ключей dict. – pyroscope
В библиотеке используется отсортированный тип словаря, но когда я печатаю его на экране, у него вместо некоторых чисел есть случайные символы. –