2012-04-25 5 views
3

iOSアプリケーション内でMD5ハッシュを計算しようとしています。アプリケーション内に保存されたファイルとウェブサーバーに保存された同じファイルのハッシュを比較しようとしています。 PHP。iPhone上のUIImageとサーバー上のファイルの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が生成します。3ef9386b1dd50e8e166 efbe48f0f9401

UPDATE

ちょうどシミュレータを通じてアプリを実行し、それが正しくハッシュを計算:3ef9386b1dd50e8e166efbe48f0f9401。

としてiOSの5.1それは計算を実行している私のiPhone 4上で実行したとき:ddf017003e063e353a5e4ec2cc4a5095

+0

同じ文字列のファイルに置き換えた場合、同じ結果が得られますか? –

+0

答えを広げることはできますか?あなたが申し訳ありませんが何を意味するか分かりません –

+1

現在、あなたはファイルのハッシュを取得しています、既知の文字列のハッシュを取得することをお勧めします。 –

答えて

6

D41D8CD98F00B204E9800998ECF8427Eは、空のファイルのMD5合計です。あなたはファイルを正しく読まないので、おそらくdataWithContentsOfFile:絶対パスが必要なのです。 試用:

NSString *path = [[NSBundle mainBundle] pathForResource:@"advert" ofType:@"png"]; 
NSData *plistData = [NSData dataWithContentsOfFile:path]; 
+0

私はイメージがデバイスから読み取られていることを確認することができます。上記のコードを使用すると、GUI内でイメージを正常に表示できます。私は今、ハッシュを取得しています:ddf017003e063e353a5e4ec2cc4a5095 –

+0

さて、あなたは新しい、別の問題があります。明確な問題記述を投稿することで、解決策を見つけるのに多くの手助けが必要になります。 – unbeli

+0

私はまだこのサイトの使い方に慣れています。元の投稿を編集する必要がありますか? –

3

私の推測では、あなたがアクションでiPhone PNGオプティマイザをちょうど目撃したということです。

+0

私は..両方ともハッシュを生成すると信じています:5d41402abc4b2a76b9719d911017c592 'hello'という文字列です。だから、私は、IOSのMD5コードが正しいと信じていますが、イメージの配信はありません:P –

0

私は同じ問題があります。以下は私のコードです

NSString *fileName = @"1.png";  
UIImage *image = [UIImage imageNamed:fileName]; 
NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName]; 
NSData *dataFromFile = [NSData dataWithContentsOfFile:filePath]; 
NSData *dataFromImage = [NSData dataWithData:UIImagePNGRepresentation(image)]; 
NSString *md5FileToString = [dataFromFile md5Hash]; 
NSString *md5ImageToString = [dataFromImage md5Hash]; 
NSLog(@"%@,%@",md5FileToString,md5ImageToString); 
関連する問題