您的位置:首页 > 移动开发 > IOS开发

iOS - 获取文件MD5 :

2014-04-23 10:32 609 查看
1.首先导入头文件:

#include <CommonCrypto/CommonDigest.h>


2.具体实现方法.

CFStringRef FileMD5HashCreateWithPath(CFStringRef filePath) {

// Declare needed variables
CFStringRef result = NULL;
CFReadStreamRef readStream = NULL;

// Get the file URL
CFURLRef fileURL =
CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
(CFStringRef)filePath,
kCFURLPOSIXPathStyle,
(Boolean)false);
if (!fileURL) goto done;

// Create and open the read stream
readStream = CFReadStreamCreateWithFile(kCFAllocatorDefault,
(CFURLRef)fileURL);
if (!readStream) goto done;
bool didSucceed = (bool)CFReadStreamOpen(readStream);
if (!didSucceed) goto done;

// Initialize the hash object
CC_MD5_CTX hashObject;
CC_MD5_Init(&hashObject);

// Feed the data to the hash object
bool hasMoreData = true;
while (hasMoreData) {
uint8_t buffer[4096];
CFIndex readBytesCount = CFReadStreamRead(readStream,
(UInt8 *)buffer,
(CFIndex)sizeof(buffer));
if (readBytesCount == -1) break;
if (readBytesCount == 0) {
hasMoreData = false;
continue;
}
CC_MD5_Update(&hashObject,
(const void *)buffer,
(CC_LONG)readBytesCount);
}

// Check if the read operation succeeded
didSucceed = !hasMoreData;

// Compute the hash digest
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(digest, &hashObject);

// Abort if the read operation failed
if (!didSucceed) goto done;

// Compute the string result
char hash[2 * sizeof(digest) + 1];
for (size_t i = 0; i < sizeof(digest); ++i) {
snprintf(hash + (2 * i), 3, "%02x", (int)(digest[i]));
}
result = CFStringCreateWithCString(kCFAllocatorDefault,
(const char *)hash,
kCFStringEncodingUTF8);

done:

if (readStream) {
CFReadStreamClose(readStream);
CFRelease(readStream);
}
if (fileURL) {
CFRelease(fileURL);
}

NSLog(@"MD5// %@",result);

return result;
}

3.实现此方法:

FileMD5HashCreateWithPath((__bridge CFStringRef)([[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.txt.zip"]));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MD5 文件MD5