3

アプリ内に保存されたファイルとPHPを使用してWebサーバーに保存された同じファイルの間でハッシュを比較するために、iOSアプリ内でMD5ハッシュを計算しようとしています。

これは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);

Webサーバーのコード:

$file = 'advert.png';
echo 'MD5 file hash of ' . $file . ': ' . md5_file($file);

アプリが生成するもの:D41D8CD98F00B204E9800998ECF8427E

PHPが生成するもの:3ef9386b1dd50e8e166efbe48f0f9401

md5sumは次を生成します:3ef9386b1dd50e8e166efbe48f0f9401

更新

シミュレーターでアプリを実行するだけで、ハッシュが正しく計算されます:3ef9386b1dd50e8e166efbe48f0f9401。

iOS5.1を実行しているiPhone4で実行すると、次のように計算されます:ddf017003e063e353a5e4ec2cc4a5095

4

2 に答える 2

6

D41D8CD98F00B204E9800998ECF8427E空のファイルの MD5 合計です。ファイルを正しく読み取っていません。その理由は、おそらく dataWithContentsOfFile: に絶対パスが必要だからです。試す:

NSString *path = [[NSBundle mainBundle] pathForResource:@"advert" ofType:@"png"];
NSData *plistData = [NSData dataWithContentsOfFile:path];
于 2012-04-25T21:25:29.127 に答える
3

私の推測では、iPhone PNG オプティマイザーが実際に動作しているのを見たことがあると思います。

于 2012-04-25T21:18:27.743 に答える