如何在iOS上创build一个文件的散列?

我试图通过在iOS中使用哈希值来重命名它们来创build唯一的文件名。 我怎样才能做到这一点?

你可以通过扩展NSString来实现这一点,试试这个在你的.h:

@interface NSString(MD5) - (NSString *)generateMD5Hash @end 

这在你的.m

 - (NSString*)generateMD5Hash { const char *string = [self UTF8String]; unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; CC_MD5(string, strlen(string), md5Buffer); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [output appendFormat:@"%02x",md5Buffer[i]]; return output; } 

你可以通过创build一个名为NSString + MD5的新类来实现,并将上面的代码插入相应的文件(.h和.m)

编辑:不要忘记导入

<CommonCrypto / CommonDigest.h>

编辑2:

而对于NSData;

 @interface NSData(MD5) - (NSString *)generateMD5Hash; @end 

你妈:

 - (NSString *)generateMD5Hash { unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; CC_MD5(self.bytes, (CC_LONG)self.length, md5Buffer); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [output appendFormat:@"%02x",md5Buffer[i]]; return output; } 

请注意,返回的值是autorelease,可能需要由接收者保留。

希望这可以帮助。

为什么不简单地生成唯一的标识符并使​​用它? 喜欢

 CFUUIDRef uuidObj = CFUUIDCreate(nil); NSString *uniqueId = (NSString*)CFUUIDCreateString(nil, uuidObj); CFRelease(uuidObj); NSLog(@"%@",uniqueId); [uniqueId autorelease]; 

使用NSData是一个昂贵的select。 如果您随时处理大文件,最好使用NSFileHandler扩展名。