在Objective-C中使用SHA1 Hash of Torrent文件的问题

时间:2013-04-16 14:14:16

标签: objective-c hash sha1 bittorrent utorrent

由于μTorrent响应系统在通过磁链或torrent文件发送时的不足之处,也就是说,完全没有重复的torrent添加消息,我试图在它发送之前从torrent文件中获取哈希值并将其与当前工作列表进行比较。我目前的代码是返回一个不正确的哈希,我不知道为什么。 这是我正在使用的代码。

我正在尝试通过散列为“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 个答案:

答案 0 :(得分:1)

是什么让你认为BT info 哈希是一个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.