比较iPhone上的UIImage和服务器上的文件的MD5哈希值

Dan*_*ith 3 php iphone hash md5 ios

我试图在iOS应用程序中计算MD5哈希值,以便比较应用程序中保存的文件与使用PHP存储在Web服务器上的同一文件之间的哈希值.

这是iOS应用的代码:

unsigned char result[CC_MD5_DIGEST_LENGTH];

NSData* data = [NSData dataWithContentsOfFile:@"advert.png"];
const void* src = [data bytes];

CC_MD5(src, [data length], result);

    NSString *imageHash = [[NSString stringWithFormat:
                       @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                       result[0], result[1], result[2], result[3], 
                       result[4], result[5], result[6], result[7],
                       result[8], result[9], result[10], result[11],
                       result[12], result[13], result[14], result[15]]
                       lowercaseString];

NSLog(@"%@", imageHash);
Run Code Online (Sandbox Code Playgroud)

Web服务器的代码:

$file = 'advert.png';
echo 'MD5 file hash of ' . $file . ': ' . md5_file($file);
Run Code Online (Sandbox Code Playgroud)

该应用程序生成:D41D8CD98F00B204E9800998ECF8427E

PHP生成:3ef9386b1dd50e8e166efbe48f0f9401

md5sum生成:3ef9386b1dd50e8e166efbe48f0f9401

更新:

只需通过模拟器运行应用程序,它就可以正确计算哈希:3ef9386b1dd50e8e166efbe48f0f9401.

当我在运行iOS 5.1的iPhone 4上运行时计算为:ddf017003e063e353a5e4ec2cc4a5095

unb*_*eli 6

D41D8CD98F00B204E9800998ECF8427E是空文件的MD5总和.你没有正确读取文件,原因可能是dataWithContentsOfFile:需要一个绝对路径.尝试:

NSString *path = [[NSBundle mainBundle] pathForResource:@"advert" ofType:@"png"];
NSData *plistData = [NSData dataWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)