Objective-C中Torrent文件的SHA1哈希问题

Objective-C中Torrent文件的SHA1哈希问题,objective-c,hash,sha1,bittorrent,utorrent,Objective C,Hash,Sha1,Bittorrent,Utorrent,由于µTorrent的响应系统在通过磁铁链接或Torrent文件发送时存在不足,即完全没有用于添加重复Torrent的消息,因此我尝试在Torrent文件发送之前从中获取哈希值,并将其与当前作业列表进行比较。我目前拥有的代码返回了一个不正确的散列,我不知道为什么。 这是我正在使用的代码 我试图通过一个散列为“dc9202f98aea7420a2872655c8f7184401e2a9c8”的文件进行发送,该代码每次运行时都返回大约三十个散列中的一个 + (NSString *) torrentH

由于µ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;
}
+(NSString*)torrentHashFromFile:(NSData*)文件
{
NSString*retVal=@;
NSData*data=[BEncoding encodedDataFromObject:
[[BEncoding objectFromEncodedData:file]
objectForKey:@“info”]];
无符号字符哈希字节[CC_SHA1_DIGEST_LENGTH];
if(CC_SHA1([数据字节],(无符号)[数据长度],哈希字节))
{
NSMutableString*输出=[NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH*2];
for(int i=0;i
是什么让你认为BT信息哈希是SHA1而不仅仅是片段哈希

引述:

是什么让你认为BT信息散列是SHA1而不仅仅是片段散列

引述:


大部分是天真的。我把代码编辑成一个函数,前几天晚上我自己读到这个函数的时候,奇怪的是它不再返回一个不正确的散列,而是返回许多不正确的散列中的一个。我认为图书馆是罪魁祸首。很可能是24个,而不是30个左右。Bencode要求对dict键进行排序。该库使用已排序的字典类型,但当我将其打印到屏幕上时,它会用随机字符代替一些数字。大多数情况下都很幼稚。我把代码编辑成一个函数,前几天晚上我自己读到这个函数的时候,奇怪的是它不再返回一个不正确的散列,而是返回许多不正确的散列中的一个。我认为图书馆是罪魁祸首。很可能是24个,而不是30个左右。Bencode要求对dict键进行排序。该库使用已排序的字典类型,但当我将其打印到屏幕上时,它会使用随机字符代替一些数字。
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.