模拟器和设备(ipad)中的MD5问题

时间:2011-07-04 19:37:23

标签: objective-c cocoa-touch ipad md5 simulator

我使用MD5算法为同一个图像创建唯一的字符串/名称。所以我使用模拟器和ipad进行了测试。

我使用safari在Simulator中下载了一个图像并为它创建了MD5字符串。它在simulator.in模拟器中正常工作,它总是为同一个图像创建相同的字符串。

然后我通过safari将相同的图像从同一个站点/网址下载到ipad。并为此创建了一个MD5。有一个问题。两个MD5是不同的。任何人都告诉我确切的问题。

是模拟器和ipad在下载时保存不同大小的相同图像。

我使用了代码:

MyExtensions.h


@interface NSData (MyExtensions)
    - (NSString*)md5;
@end

MyExtensions.m

#import "MyExtensions.h"
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access

@implementation NSData (MyExtensions)
- (NSString*)md5
{
    unsigned char result[16];
    CC_MD5( self.bytes, self.length, result ); // This is the md5 call
    return [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]
        ];  
}
@end


-(NSString *) md5Image:(UIImage *)img {
    return [UIImagePNGRepresentation(img) md5];
}

1 个答案:

答案 0 :(得分:1)

检查answer to this post以获取可能的解释。

如您所见,CC_MD5实现可以包含一些在32位或64位OS上占用不同字节数的数据类型。这可以解释您在模拟器(Mac OSX)或设备(iOS)上进行散列时所看到的差异。