如何在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扩展名。