CFDataRef vs NSData хеширование файла - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу иметь sh файл (используя SHA1 на данный момент). Вот функция:

static inline __attribute__((always_inline)) NSString *SHA1String(NSData *data) {
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

А вот два разных способа загрузки данных:

CFURLRef filePath = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/path/to/file"), kCFURLPOSIXPathStyle, false);
CFDataRef cfFileData = CFURLCreateData(kCFAllocatorDefault, filePath, kCFStringEncodingUTF8, false);
NSString *cfFileHash = SHA1String((__bridge NSData *)cfFileData);

NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:@"/path/to/file"]];
NSString *fileHash = SHA1String((__bridge NSData *)fileData);

NSLog(@"Hashes: %@ - %@", cfFileHash, fileHash);

Хеши различаются, и мне интересно, что это вызывает. Я хотел бы использовать CoreFoundation API, но если файл ha sh отличается, это было бы плохо. Я использую другой файловый менеджер для просмотра sha1 файла, и он совпадает с NSData.

Любые идеи приветствуются.

...