0

我想散列一个文件(目前使用 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,但如果文件哈希不同,那就不好了。我使用另一个文件管理器查看文件的 sha1,它与来自 NSData 的文件匹配。

任何见解表示赞赏。

4

0 回答 0