我想散列一个文件(目前使用 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 的文件匹配。
任何见解表示赞赏。