2013-04-16 57 views
1

由於μTorrent的響應系統在通過磁力鏈接或者torrent文件發送時的不足之處,也就是說,完全沒有重複的torrent添加的消息,我試圖在發送它之前從Torrent文件中獲取散列並將其與當前作業列表進行比較。我現在的代碼正在返回一個不正確的散列,我不知道爲什麼。 這是我正在使用的代碼。SHA-1 Hash of Torrent File in Objective-C

我試圖發送一個散列爲「dc9202f98aea7420a2872655c8f7184401e2a9c8」的文件,這段代碼每次運行時都會返回30個散列中的一個。

+ (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,而不是30左右。 Bencode需要對字典鍵進行排序。 – pyroscope

+0

該庫使用已排序的字典類型,但是當我將它打印到屏幕上時,它會使用隨機字符代替某些數字。 –