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;
}
天真居多。我已經將我的代碼編輯爲一個函數,我在另一個晚上寫了一個函數,當我自己讀這個函數時,奇怪的是它不再返回不正確的散列值,它返回許多不正確的散列值之一。我認爲圖書館應該受到指責。 –
這很可能是24,而不是30左右。 Bencode需要對字典鍵進行排序。 – pyroscope
該庫使用已排序的字典類型,但是當我將它打印到屏幕上時,它會使用隨機字符代替某些數字。 –